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>
300 const ParamValue &mValue)
303 const auto ret =
tupleMap.emplace(std::make_pair(tKey,newPlace));
314 const ParamValue &mValue)
317 auto ret =
tupleMap.emplace(std::make_pair(tKey,newPlace));
322 return std::make_pair(ret.second, &
paramVector[ret.first->second]);
328 const auto ret =
tupleMap.find(findKey);
331 return std::make_pair(
true, ret->second);
342 const auto ret =
tupleMap.find(findKey);
363 typedef std::pair<TupleString<NumStrings>,
size_t> TSKeypair;
364 std::vector <TSKeypair> sortVector;
365 std::vector <ParamValue> sortValues;
368 sortVector.push_back(apair);
370 std::sort(sortVector.begin(), sortVector.end(),
371 [] (TSKeypair a, TSKeypair b)
373 return a.first.tupleCat<b.first.tupleCat;
375 for(
int newIndex=0; newIndex < sortVector.size(); ++newIndex)
377 sortValues.push_back(
paramVector[sortVector[newIndex].second]);
378 tupleMap[sortVector[newIndex].first]=newIndex;
ParamValue * get_param(const size_t &index)
bool operator<(const MultiString &rhs) const
std::pair< bool, size_t > const index_param(const TupleString< NumStrings > &findKey) const
TupleString< 1 > TupleString1
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
char * getTuplePtr(short index)
TupleString< 8 > TupleString8
std::unordered_map< TupleString< NumStrings >, size_t, TupleStringHash< NumStrings > > tupleMap
const char * getCatKey() const
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)
ParamValue * get_param_by_key(const TupleString< NumStrings > &findKey)
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
bool insert(const TupleString< NumStrings > &tKey, const ParamValue &mValue)
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
int64_t const index(const TupleString< NumStrings > &findKey) const
char mString[ParamNameMaxLen *NumStrings]
TupleString< 4 > TupleString4
MultiString(const char *t1, const char *t2)
TupleString(const char *key1, const char *key2)
std::pair< bool, ParamValue * > insert_check(const TupleString< NumStrings > &tKey, const ParamValue &mValue)