提交 9e78f600292bfce437be3edebf45644df660792a

作者 LJH 李佳桓
1 个父辈 ed36be9b

add

正在显示 1 个修改的文件 包含 88 行增加0 行删除
  1 +
  2 +/**************************************************************************
  3 +* file: dmpserverutils.h
  4 +
  5 +* Author: wanzhongping
  6 +* Date: 2021-03-17 16:05:31
  7 +* Email: zhongpingw@chinadci.com
  8 +* copyright: 广州城市信息研究所有限公司
  9 +***************************************************************************/
  10 +
  11 +#ifndef __dmpserverutils_h__
  12 +#define __dmpserverutils_h__
  13 +
  14 +#include "dmap_server.h"
  15 +#include <boost/filesystem.hpp>
  16 +#include <unordered_map>
  17 +
  18 +class SERVER_EXPORT DmpServerUtils
  19 +{
  20 + public:
  21 + //获取目录下的所有dll或so库文件
  22 + static int GetLibraryPaths(const boost::filesystem::path &dir, std::vector<boost::filesystem::path> &locations);
  23 +};
  24 +
  25 + class CaseInsensitiveEqual {
  26 + public:
  27 + bool operator()(const std::string &str1, const std::string &str2) const noexcept {
  28 + return str1.size() == str2.size() &&
  29 + std::equal(str1.begin(), str1.end(), str2.begin(), [](char a, char b) {
  30 + return tolower(a) == tolower(b);
  31 + });
  32 + }
  33 + };
  34 +
  35 + class CaseInsensitiveHash {
  36 + public:
  37 + std::size_t operator()(const std::string &str) const noexcept {
  38 + std::size_t h = 0;
  39 + std::hash<int> hash;
  40 + for(auto c : str)
  41 + h ^= hash(tolower(c)) + 0x9e3779b9 + (h << 6) + (h >> 2);
  42 + return h;
  43 + }
  44 + };
  45 +
  46 +
  47 + using CaseInsensitiveMultimap = std::unordered_multimap<std::string, std::string, CaseInsensitiveHash, CaseInsensitiveEqual>;
  48 +
  49 + // Percent encoding and decoding
  50 + class Percent {
  51 + public:
  52 + static std::string encode(const std::string &value) noexcept;
  53 + static std::string decode(const std::string &value) noexcept;
  54 + };
  55 +
  56 +
  57 +//自定义大小写不敏感的map
  58 +struct ci_less : std::binary_function<std::string, std::string, bool>
  59 +{
  60 + // case-independent (ci) compare_less binary function
  61 + struct nocase_compare : public std::binary_function<unsigned char, unsigned char, bool>
  62 + {
  63 + bool operator()(const unsigned char &c1, const unsigned char &c2) const
  64 + {
  65 + return tolower(c1) < tolower(c2);
  66 + }
  67 + };
  68 + bool operator()(const std::string &s1, const std::string &s2) const
  69 + {
  70 + return std::lexicographical_compare(s1.begin(), s1.end(), // source range
  71 + s2.begin(), s2.end(), // dest range
  72 + nocase_compare()); // comparison
  73 + }
  74 +};
  75 +
  76 +using CIMap = std::map<std::string, std::string, ci_less>;
  77 +
  78 + // Query string creation and parsing
  79 + class QueryString {
  80 + public:
  81 + // Returns query string created from given field names and values
  82 + static std::string create(const CIMap &fields) noexcept;
  83 + // Returns query keys with percent-decoded values.
  84 + static CIMap parse(const std::string &query_string) noexcept;
  85 + };
  86 +
  87 +
  88 +#endif //__dmpserverutils_h__
... ...
注册登录 后发表评论