proxygen
proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive > Class Template Reference

#include <PerfectIndexMap.h>

Public Member Functions

 PerfectIndexMap ()
 
virtual ~PerfectIndexMap ()=default
 
folly::Optional< std::stringgetSingleOrNone (const std::string &keyStr) const
 
folly::Optional< std::stringgetSingleOrNone (Key key) const
 
void add (const std::string &keyStr, const std::string &value)
 
void add (Key key, const std::string &value)
 
void set (const std::string &keyStr, const std::string &value)
 
void set (Key key, const std::string &value)
 
bool remove (const std::string &keyStr)
 
bool remove (Key key)
 
size_t size ()
 

Private Member Functions

const std::stringgetSingleKey (Key key) const
 
const std::stringgetSingleOtherKey (const std::string &keyStr) const
 
void setKey (Key key, const std::string &value)
 
void setOtherKey (const std::string &keyStr, const std::string &value)
 
bool removeKey (Key key)
 
bool removeOtherKey (const std::string &keyStr)
 
std::ptrdiff_t searchForKey (Key key, const Key *&data) const
 
std::ptrdiff_t searchForOtherKey (const std::string &keyStr, size_t &startIndex) const
 
void addKeyToIndex (Key key, const std::string &value)
 
void addOtherKeyToIndex (const std::string &keyStr, const std::string &value)
 
void replaceKeyAtIndex (std::ptrdiff_t index, Key key, const std::string &value)
 
void replaceOtherKeyAtIndex (size_t namesIndex, const std::string &keyStr, const std::string &value)
 
void removeAtIndex (std::ptrdiff_t index)
 

Private Attributes

size_t otherKeyCount_ {0}
 
size_t noneKeyCount_ {0}
 
folly::fbvector< Key > keys_
 
folly::fbvector< size_t > otherKeyNamesKeysIndex_
 
folly::fbvector< std::stringotherKeyNames_
 
folly::fbvector< std::stringvalues_
 

Detailed Description

template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
class proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >

Definition at line 48 of file PerfectIndexMap.h.

Constructor & Destructor Documentation

template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::PerfectIndexMap ( )
inline

Definition at line 51 of file PerfectIndexMap.h.

51 {}
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
virtual proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::~PerfectIndexMap ( )
virtualdefault

Member Function Documentation

template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::add ( const std::string keyStr,
const std::string value 
)
inline

Definition at line 78 of file PerfectIndexMap.h.

78  {
79  CHECK(AllowDuplicates);
80  auto key = PerfectHashStrToKey(keyStr);
81  if (key == OtherKey) {
82  addOtherKeyToIndex(keyStr, value);
83  } else {
84  add(key, value);
85  }
86  }
void addOtherKeyToIndex(const std::string &keyStr, const std::string &value)
void add(const std::string &keyStr, const std::string &value)
static const char *const value
Definition: Conv.cpp:50
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::add ( Key  key,
const std::string value 
)
inline

Definition at line 88 of file PerfectIndexMap.h.

88  {
89  CHECK(AllowDuplicates && key != OtherKey && key != NoneKey);
90  addKeyToIndex(key, value);
91  }
static const char *const value
Definition: Conv.cpp:50
void addKeyToIndex(Key key, const std::string &value)
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::addKeyToIndex ( Key  key,
const std::string value 
)
inlineprivate

Definition at line 279 of file PerfectIndexMap.h.

279  {
280  keys_.push_back(key);
282  }
folly::fbvector< std::string > values_
void push_back(const T &value)
Definition: FBVector.h:1156
static const char *const value
Definition: Conv.cpp:50
void emplace_back(Args &&...args)
Definition: FBVector.h:1147
folly::fbvector< Key > keys_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::addOtherKeyToIndex ( const std::string keyStr,
const std::string value 
)
inlineprivate

Definition at line 283 of file PerfectIndexMap.h.

283  {
284  keys_.push_back(OtherKey);
288  ++otherKeyCount_;
289  }
folly::fbvector< std::string > otherKeyNames_
folly::fbvector< std::string > values_
void push_back(const T &value)
Definition: FBVector.h:1156
static const char *const value
Definition: Conv.cpp:50
void emplace_back(Args &&...args)
Definition: FBVector.h:1147
folly::fbvector< size_t > otherKeyNamesKeysIndex_
size_type size() const noexcept
Definition: FBVector.h:964
folly::fbvector< Key > keys_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
const std::string* proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::getSingleKey ( Key  key) const
inlineprivate

Definition at line 140 of file PerfectIndexMap.h.

140  {
141  const Key* data = keys_.data();
142  if (data) {
143  auto offset = searchForKey(key, data);
144  if (data) {
145  if (AllowDuplicates && searchForKey(key, ++data) != -1) {
146  return nullptr;
147  }
148  return &values_[offset];
149  }
150  }
151  return nullptr;
152  }
internal::KeyMatcher< M > Key(M inner_matcher)
T * data() noexcept
Definition: FBVector.h:1135
folly::fbvector< std::string > values_
std::ptrdiff_t searchForKey(Key key, const Key *&data) const
static constexpr uint64_t data[1]
Definition: Fingerprint.cpp:43
folly::fbvector< Key > keys_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
folly::Optional<std::string> proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::getSingleOrNone ( const std::string keyStr) const
inline

Definition at line 56 of file PerfectIndexMap.h.

57  {
58  auto key = PerfectHashStrToKey(keyStr);
59  if (key == OtherKey) {
60  const std::string *result = getSingleOtherKey(keyStr);
61  return (
62  result == nullptr ? folly::none : folly::Optional<std::string>(*result)
63  );
64  } else {
65  return getSingleOrNone(key);
66  }
67  }
const std::string * getSingleOtherKey(const std::string &keyStr) const
folly::Optional< std::string > getSingleOrNone(const std::string &keyStr) const
const char * string
Definition: Conv.cpp:212
constexpr None none
Definition: Optional.h:87
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
folly::Optional<std::string> proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::getSingleOrNone ( Key  key) const
inline

Definition at line 68 of file PerfectIndexMap.h.

68  {
69  CHECK(key != OtherKey && key != NoneKey);
70  const std::string *result = getSingleKey(key);
71  return (
72  result == nullptr ? folly::none : folly::Optional<std::string>(*result)
73  );
74  }
const std::string * getSingleKey(Key key) const
const char * string
Definition: Conv.cpp:212
constexpr None none
Definition: Optional.h:87
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
const std::string* proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::getSingleOtherKey ( const std::string keyStr) const
inlineprivate

Definition at line 153 of file PerfectIndexMap.h.

153  {
154  size_t searchIndex = 0;
155  auto index = searchForOtherKey(keyStr, searchIndex);
156  if (index != -1) {
157  if (AllowDuplicates && searchForOtherKey(keyStr, ++searchIndex) != -1) {
158  return nullptr;
159  }
160  return &values_[index];
161  }
162  return nullptr;
163  }
std::ptrdiff_t searchForOtherKey(const std::string &keyStr, size_t &startIndex) const
folly::fbvector< std::string > values_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
bool proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::remove ( const std::string keyStr)
inline

Definition at line 115 of file PerfectIndexMap.h.

115  {
116  auto key = PerfectHashStrToKey(keyStr);
117  if (key == OtherKey) {
118  return removeOtherKey(keyStr);
119  } else {
120  return remove(key);
121  }
122  }
bool removeOtherKey(const std::string &keyStr)
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
bool proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::remove ( Key  key)
inline

Definition at line 123 of file PerfectIndexMap.h.

123  {
124  CHECK(key != OtherKey && key != NoneKey);
125  return removeKey(key);
126  }
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::removeAtIndex ( std::ptrdiff_t  index)
inlineprivate

Definition at line 302 of file PerfectIndexMap.h.

302  {
303  CHECK(keys_[index] != NoneKey);
304  if (keys_[index] == OtherKey) {
305  --otherKeyCount_;
306  }
307  keys_[index] = NoneKey;
308  ++noneKeyCount_;
309  // We purposefully omit actually clearing some other data structures
310  // as it is often useful for debugging purposes to leave this data around.
311  }
folly::fbvector< Key > keys_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
bool proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::removeKey ( Key  key)
inlineprivate

Definition at line 210 of file PerfectIndexMap.h.

210  {
211  const Key* data = keys_.data();
212  bool anyRemoved = false;
213  std::ptrdiff_t offset;
214  while (data) {
215  offset = searchForKey(key, data);
216  if (data) {
217  removeAtIndex(offset);
218  anyRemoved = true;
219  if (!AllowDuplicates) {
220  break;
221  }
222  ++data;
223  }
224  }
225  return anyRemoved;
226  }
internal::KeyMatcher< M > Key(M inner_matcher)
T * data() noexcept
Definition: FBVector.h:1135
std::ptrdiff_t searchForKey(Key key, const Key *&data) const
void removeAtIndex(std::ptrdiff_t index)
static constexpr uint64_t data[1]
Definition: Fingerprint.cpp:43
folly::fbvector< Key > keys_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
bool proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::removeOtherKey ( const std::string keyStr)
inlineprivate

Definition at line 227 of file PerfectIndexMap.h.

227  {
228  bool anyRemoved = false;
229  size_t searchIndex = 0;
230  while (searchForOtherKey(keyStr, searchIndex) != -1) {
232  anyRemoved = true;
233  if (!AllowDuplicates) {
234  break;
235  }
236  ++searchIndex;
237  }
238  return anyRemoved;
239  }
std::ptrdiff_t searchForOtherKey(const std::string &keyStr, size_t &startIndex) const
void removeAtIndex(std::ptrdiff_t index)
folly::fbvector< size_t > otherKeyNamesKeysIndex_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::replaceKeyAtIndex ( std::ptrdiff_t  index,
Key  key,
const std::string value 
)
inlineprivate

Definition at line 290 of file PerfectIndexMap.h.

291  {
292  keys_[index] = key;
293  values_[index] = value;
294  }
folly::fbvector< std::string > values_
static const char *const value
Definition: Conv.cpp:50
folly::fbvector< Key > keys_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::replaceOtherKeyAtIndex ( size_t  namesIndex,
const std::string keyStr,
const std::string value 
)
inlineprivate

Definition at line 295 of file PerfectIndexMap.h.

296  {
297  otherKeyNames_[namesIndex] = keyStr;
298  values_[otherKeyNamesKeysIndex_[namesIndex]] = value;
299  }
folly::fbvector< std::string > otherKeyNames_
folly::fbvector< std::string > values_
static const char *const value
Definition: Conv.cpp:50
folly::fbvector< size_t > otherKeyNamesKeysIndex_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
std::ptrdiff_t proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::searchForKey ( Key  key,
const Key *&  data 
) const
inlineprivate

Definition at line 245 of file PerfectIndexMap.h.

245  {
246  if (data) {
247  data = (Key*)memchr(
248  (void*)data, key, keys_.size() - (data - keys_.data()));
249  if (data) {
250  return data - keys_.data();
251  }
252  }
253  return -1;
254  }
internal::KeyMatcher< M > Key(M inner_matcher)
T * data() noexcept
Definition: FBVector.h:1135
size_type size() const noexcept
Definition: FBVector.h:964
static constexpr uint64_t data[1]
Definition: Fingerprint.cpp:43
folly::fbvector< Key > keys_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
std::ptrdiff_t proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::searchForOtherKey ( const std::string keyStr,
size_t &  startIndex 
) const
inlineprivate

Definition at line 255 of file PerfectIndexMap.h.

256  {
257  while (startIndex < otherKeyNamesKeysIndex_.size()) {
258  // The key can only be OtherKey or NoneKey
259  if (keys_[otherKeyNamesKeysIndex_[startIndex]] == OtherKey) {
260  if (CaseInsensitive) {
261  // One might be tempted to merge this statement with that above
262  // but that would be wrong. If CaseInsensitive is true, we do not
263  // want any other check evaluating.
264  if (caseInsensitiveEqual(otherKeyNames_[startIndex], keyStr)) {
265  return otherKeyNamesKeysIndex_[startIndex];
266  }
267  } else {
268  if (otherKeyNames_[startIndex] == keyStr) {
269  return otherKeyNamesKeysIndex_[startIndex];
270  }
271  }
272  }
273  ++startIndex;
274  }
275  return -1;
276  }
bool caseInsensitiveEqual(folly::StringPiece s, folly::StringPiece t)
Definition: UtilInl.h:17
folly::fbvector< std::string > otherKeyNames_
folly::fbvector< size_t > otherKeyNamesKeysIndex_
size_type size() const noexcept
Definition: FBVector.h:964
folly::fbvector< Key > keys_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::set ( const std::string keyStr,
const std::string value 
)
inline

Definition at line 97 of file PerfectIndexMap.h.

97  {
98  auto key = PerfectHashStrToKey(keyStr);
99  if (key == OtherKey) {
100  setOtherKey(keyStr, value);
101  } else {
102  set(key, value);
103  }
104  }
void setOtherKey(const std::string &keyStr, const std::string &value)
static const char *const value
Definition: Conv.cpp:50
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::set ( Key  key,
const std::string value 
)
inline

Definition at line 106 of file PerfectIndexMap.h.

106  {
107  CHECK(key != OtherKey && key != NoneKey);
108  setKey(key, value);
109  }
static const char *const value
Definition: Conv.cpp:50
void setKey(Key key, const std::string &value)
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::setKey ( Key  key,
const std::string value 
)
inlineprivate

Definition at line 165 of file PerfectIndexMap.h.

165  {
166  const Key* data = keys_.data();
167  bool set = false;
168  std::ptrdiff_t offset;
169  while (data) {
170  offset = searchForKey(key, data);
171  if (data) {
172  if (!set) {
173  replaceKeyAtIndex(offset, key, value);
174  if (AllowDuplicates) {
175  set = true;
176  } else {
177  return;
178  }
179  } else {
180  removeAtIndex(offset);
181  }
182  ++data;
183  }
184  }
185  if (!set) {
186  addKeyToIndex(key, value);
187  }
188  }
internal::KeyMatcher< M > Key(M inner_matcher)
T * data() noexcept
Definition: FBVector.h:1135
std::ptrdiff_t searchForKey(Key key, const Key *&data) const
void replaceKeyAtIndex(std::ptrdiff_t index, Key key, const std::string &value)
void removeAtIndex(std::ptrdiff_t index)
static const char *const value
Definition: Conv.cpp:50
void addKeyToIndex(Key key, const std::string &value)
static constexpr uint64_t data[1]
Definition: Fingerprint.cpp:43
folly::fbvector< Key > keys_
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
void proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::setOtherKey ( const std::string keyStr,
const std::string value 
)
inlineprivate

Definition at line 189 of file PerfectIndexMap.h.

189  {
190  bool set = false;
191  size_t searchIndex = 0;
192  while (searchForOtherKey(keyStr, searchIndex) != -1) {
193  if (!set) {
194  replaceOtherKeyAtIndex(searchIndex, keyStr, value);
195  if (AllowDuplicates) {
196  set = true;
197  } else {
198  return;
199  }
200  } else {
202  }
203  ++searchIndex;
204  }
205  if (!set) {
206  addOtherKeyToIndex(keyStr, value);
207  }
208  }
std::ptrdiff_t searchForOtherKey(const std::string &keyStr, size_t &startIndex) const
void addOtherKeyToIndex(const std::string &keyStr, const std::string &value)
void removeAtIndex(std::ptrdiff_t index)
static const char *const value
Definition: Conv.cpp:50
folly::fbvector< size_t > otherKeyNamesKeysIndex_
void replaceOtherKeyAtIndex(size_t namesIndex, const std::string &keyStr, const std::string &value)
template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
size_t proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::size ( )
inline

Definition at line 128 of file PerfectIndexMap.h.

128  {
129  return keys_.size() - noneKeyCount_;
130  }
size_type size() const noexcept
Definition: FBVector.h:964
folly::fbvector< Key > keys_

Member Data Documentation

template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
folly::fbvector<Key> proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::keys_
private

Definition at line 350 of file PerfectIndexMap.h.

template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
size_t proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::noneKeyCount_ {0}
private

Definition at line 341 of file PerfectIndexMap.h.

template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
size_t proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::otherKeyCount_ {0}
private

Definition at line 340 of file PerfectIndexMap.h.

template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
folly::fbvector<std::string> proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::otherKeyNames_
private

Definition at line 366 of file PerfectIndexMap.h.

template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
folly::fbvector<size_t> proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::otherKeyNamesKeysIndex_
private

Definition at line 358 of file PerfectIndexMap.h.

template<typename Key, Key OtherKey, Key NoneKey, Key(*)(const std::string &) PerfectHashStrToKey, bool AllowDuplicates, bool CaseInsensitive>
folly::fbvector<std::string> proxygen::PerfectIndexMap< Key, OtherKey, NoneKey, PerfectHashStrToKey, AllowDuplicates, CaseInsensitive >::values_
private

Definition at line 370 of file PerfectIndexMap.h.


The documentation for this class was generated from the following file: