14 #include <unordered_map> 67 template <
short NumStrings>
76 template <
short NumStrings>
108 MultiString(
const char *t1,
const char *t2,
const char *t3,
const char *t4)
117 MultiString(
const char *t1,
const char *t2,
const char *t3,
const char *t4,
118 const char *t5,
const char *t6,
const char *t7,
const char *t8
137 for(
int i=0; i < mStringLen ;i++)
143 inline short length()
const {
return mStringLen;}
163 template <
short NumStrings>
200 const char* key4,
const char* key5,
const char* key6,
201 const char* key7,
const char* key8)
204 key5, key6, key7, key8);
241 template <
short NumStrings>
248 static_assert((NumStrings==1) || (NumStrings==2) || (NumStrings==3)
249 || (NumStrings==4) || (NumStrings==8),
250 "invalid NumStrings must be: [1,2,3,4,8]");
272 template <
short NumStrings,
class ParamValue>
278 std::unordered_map<KeyType, size_t, TupleStringHash<NumStrings>>
tupleMap;
289 if (it->second ==
index) {
311 const ParamValue &mValue)
314 const auto ret =
tupleMap.emplace(std::make_pair(tKey,newPlace));
325 const ParamValue &mValue)
328 auto ret =
tupleMap.emplace(std::make_pair(tKey,newPlace));
333 return std::make_pair(ret.second, &
paramVector[ret.first->second]);
339 const auto ret =
tupleMap.find(findKey);
342 return std::make_pair(
true, ret->second);
353 const auto ret =
tupleMap.find(findKey);
374 typedef std::pair<TupleString<NumStrings>,
size_t> TSKeypair;
375 std::vector <TSKeypair> sortVector;
376 std::vector <ParamValue> sortValues;
379 sortVector.push_back(apair);
381 std::sort(sortVector.begin(), sortVector.end(),
382 [] (TSKeypair a, TSKeypair b)
384 return a.first.tupleCat<b.first.tupleCat;
386 for(
int newIndex=0; newIndex < sortVector.size(); ++newIndex)
388 sortValues.push_back(
paramVector[sortVector[newIndex].second]);
389 tupleMap[sortVector[newIndex].first]=newIndex;
ParamValue * get_param(const size_t &index)
bool operator<(const MultiString &rhs) const
TupleString< 1 > TupleString1
ParamValue * get_param_by_key(const KeyType &findKey)
MultiString(const MultiString< NumStrings > &rhs)
MultiString(const char *t1, const char *t2, const char *t3, const char *t4)
TupleString(const char *key1, const char *key2, const char *key3, const char *key4)
bool operator==(const TupleString &rhs) const
size_t operator()(const TupleString< NumStrings > &k) const
TupleString(const char *key1, const char *key2, const char *key3, const char *key4, const char *key5, const char *key6, const char *key7, const char *key8)
TupleString< 2 > TupleString2
std::pair< bool, size_t > const index_param(const KeyType &findKey) const
char * getTuplePtr(short index)
bool insert(const KeyType &tKey, const ParamValue &mValue)
TupleString< 8 > TupleString8
int64_t const index(const KeyType &findKey) const
std::unordered_map< KeyType, size_t, TupleStringHash< NumStrings > > tupleMap
const char * getCatKey() const
std::pair< bool, ParamValue * > insert_check(const KeyType &tKey, const ParamValue &mValue)
char mStride[ParamNameMaxLen]
MultiString(const char *t1, const char *t2, const char *t3, const char *t4, const char *t5, const char *t6, const char *t7, const char *t8)
TupleString(const char *key1, const char *key2, const char *key3)
const short getMStringLen() const
MStringStrider stride[NumStrings]
char * getTuplePtr(short index)
MultiString(const char *t1)
MultiString(const char *t1, const char *t2, const char *t3)
MultiString< NumStrings > tupleCat
const short getTupleMaxLen() const
static const short ParamNameMaxLen
bool operator<(const TupleString &rhs) const
TupleString< 3 > TupleString3
TupleString(const char *key1)
std::vector< ParamValue > paramVector
TupleStrider< NumStrings > multiString
const char * getMString() const
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void *input, size_t len)
const uint64_t getHashKey() const
bool operator==(const MultiString &rhs) const
char mString[ParamNameMaxLen *NumStrings]
TupleString< 4 > TupleString4
bool get_key_by_index(size_t index, KeyType &key) const
MultiString(const char *t1, const char *t2)
TupleString(const char *key1, const char *key2)