NAMD
Public Types | Public Member Functions | Public Attributes | List of all members
TwoLevelParam< NumStrings, ParamValue > Class Template Reference

#include <TupleString.h>

Public Types

using KeyType = TupleString< NumStrings >
 

Public Member Functions

 TwoLevelParam ()
 
ParamValue * get_param (const size_t &index)
 
bool get_key_by_index (size_t index, KeyType &key) const
 
ParamValue * get_param_by_key (const KeyType &findKey)
 
bool insert (const KeyType &tKey, const ParamValue &mValue)
 
std::pair< bool, ParamValue * > insert_check (const KeyType &tKey, const ParamValue &mValue)
 
std::pair< bool, size_t > const index_param (const KeyType &findKey) const
 
int64_t const index (const KeyType &findKey) const
 
void clear ()
 
void sort ()
 

Public Attributes

std::vector< ParamValue > paramVector
 
std::unordered_map< KeyType, size_t, TupleStringHash< NumStrings > > tupleMap
 

Detailed Description

template<short NumStrings, class ParamValue>
class TwoLevelParam< NumStrings, ParamValue >

Definition at line 273 of file TupleString.h.

Member Typedef Documentation

◆ KeyType

template<short NumStrings, class ParamValue>
using TwoLevelParam< NumStrings, ParamValue >::KeyType = TupleString<NumStrings>

Definition at line 276 of file TupleString.h.

Constructor & Destructor Documentation

◆ TwoLevelParam()

template<short NumStrings, class ParamValue>
TwoLevelParam< NumStrings, ParamValue >::TwoLevelParam ( )
inline

Definition at line 279 of file TupleString.h.

280  {
281  }

Member Function Documentation

◆ clear()

template<short NumStrings, class ParamValue>
void TwoLevelParam< NumStrings, ParamValue >::clear ( void  )
inline

Definition at line 361 of file TupleString.h.

362  {
363  tupleMap.clear();
364  paramVector.clear();
365  }
std::unordered_map< KeyType, size_t, TupleStringHash< NumStrings > > tupleMap
Definition: TupleString.h:278
std::vector< ParamValue > paramVector
Definition: TupleString.h:277

◆ get_key_by_index()

template<short NumStrings, class ParamValue>
bool TwoLevelParam< NumStrings, ParamValue >::get_key_by_index ( size_t  index,
KeyType key 
) const
inline

Definition at line 287 of file TupleString.h.

287  {
288  for (auto it = tupleMap.begin(); it != tupleMap.end(); ++it) {
289  if (it->second == index) {
290  key = it->first;
291  return true;
292  }
293  }
294  return false;
295  }
int64_t const index(const KeyType &findKey) const
Definition: TupleString.h:351
std::unordered_map< KeyType, size_t, TupleStringHash< NumStrings > > tupleMap
Definition: TupleString.h:278

◆ get_param()

template<short NumStrings, class ParamValue>
ParamValue* TwoLevelParam< NumStrings, ParamValue >::get_param ( const size_t &  index)
inline

Definition at line 282 of file TupleString.h.

283  {
284  return &(paramVector[index]);
285  }
int64_t const index(const KeyType &findKey) const
Definition: TupleString.h:351
std::vector< ParamValue > paramVector
Definition: TupleString.h:277

◆ get_param_by_key()

template<short NumStrings, class ParamValue>
ParamValue* TwoLevelParam< NumStrings, ParamValue >::get_param_by_key ( const KeyType findKey)
inline

Definition at line 297 of file TupleString.h.

298  {
299  auto ret = tupleMap.find(findKey);
300  if(ret!=tupleMap.end())
301  {
302  return &paramVector[ret->second];
303  }
304  else
305  {
306  return NULL;
307  }
308  }
std::unordered_map< KeyType, size_t, TupleStringHash< NumStrings > > tupleMap
Definition: TupleString.h:278
std::vector< ParamValue > paramVector
Definition: TupleString.h:277

◆ index()

template<short NumStrings, class ParamValue>
int64_t const TwoLevelParam< NumStrings, ParamValue >::index ( const KeyType findKey) const
inline

Definition at line 351 of file TupleString.h.

Referenced by Parameters::assign_angle_index(), Parameters::assign_bond_index(), Parameters::assign_crossterm_index(), Parameters::assign_dihedral_index(), Parameters::assign_improper_index(), TwoLevelParam< 4, DihedralValue >::get_key_by_index(), and TwoLevelParam< 4, DihedralValue >::get_param().

352  {
353  const auto ret = tupleMap.find(findKey);
354  if(ret!=tupleMap.end())
355  {
356  return ret->second;
357  }
358  return -1;
359  }
std::unordered_map< KeyType, size_t, TupleStringHash< NumStrings > > tupleMap
Definition: TupleString.h:278

◆ index_param()

template<short NumStrings, class ParamValue>
std::pair<bool, size_t> const TwoLevelParam< NumStrings, ParamValue >::index_param ( const KeyType findKey) const
inline

Definition at line 337 of file TupleString.h.

338  {
339  const auto ret = tupleMap.find(findKey);
340  if(ret!=tupleMap.end())
341  {
342  return std::make_pair(true, ret->second);
343  }
344  else
345  {
346  return std::make_pair(false, paramVector.size());
347  }
348  }
std::unordered_map< KeyType, size_t, TupleStringHash< NumStrings > > tupleMap
Definition: TupleString.h:278
std::vector< ParamValue > paramVector
Definition: TupleString.h:277

◆ insert()

template<short NumStrings, class ParamValue>
bool TwoLevelParam< NumStrings, ParamValue >::insert ( const KeyType tKey,
const ParamValue &  mValue 
)
inline

Definition at line 310 of file TupleString.h.

312  {
313  size_t newPlace = paramVector.size();
314  const auto ret = tupleMap.emplace(std::make_pair(tKey,newPlace));
315  if(ret.second)
316  {
317 
318  paramVector.push_back(mValue);
319  }
320  return ret.second;
321  }
std::unordered_map< KeyType, size_t, TupleStringHash< NumStrings > > tupleMap
Definition: TupleString.h:278
std::vector< ParamValue > paramVector
Definition: TupleString.h:277

◆ insert_check()

template<short NumStrings, class ParamValue>
std::pair<bool, ParamValue*> TwoLevelParam< NumStrings, ParamValue >::insert_check ( const KeyType tKey,
const ParamValue &  mValue 
)
inline

Definition at line 324 of file TupleString.h.

326  {
327  size_t newPlace = paramVector.size();
328  auto ret = tupleMap.emplace(std::make_pair(tKey,newPlace));
329  if(ret.second)
330  {
331  paramVector.push_back(mValue);
332  }
333  return std::make_pair(ret.second, &paramVector[ret.first->second]);
334  }
std::unordered_map< KeyType, size_t, TupleStringHash< NumStrings > > tupleMap
Definition: TupleString.h:278
std::vector< ParamValue > paramVector
Definition: TupleString.h:277

◆ sort()

template<short NumStrings, class ParamValue>
void TwoLevelParam< NumStrings, ParamValue >::sort ( void  )
inline

Definition at line 372 of file TupleString.h.

373  {
374  typedef std::pair<TupleString<NumStrings>, size_t> TSKeypair;
375  std::vector <TSKeypair> sortVector;
376  std::vector <ParamValue> sortValues;
377  for(auto apair : tupleMap)
378  {
379  sortVector.push_back(apair);
380  }
381  std::sort(sortVector.begin(), sortVector.end(),
382  [] (TSKeypair a, TSKeypair b)
383  {
384  return a.first.tupleCat<b.first.tupleCat;
385  });
386  for(int newIndex=0; newIndex < sortVector.size(); ++newIndex)
387  {
388  sortValues.push_back(paramVector[sortVector[newIndex].second]);
389  tupleMap[sortVector[newIndex].first]=newIndex;
390  }
391  paramVector=sortValues;
392  }
std::unordered_map< KeyType, size_t, TupleStringHash< NumStrings > > tupleMap
Definition: TupleString.h:278
std::vector< ParamValue > paramVector
Definition: TupleString.h:277

Member Data Documentation

◆ paramVector

template<short NumStrings, class ParamValue>
std::vector<ParamValue> TwoLevelParam< NumStrings, ParamValue >::paramVector

◆ tupleMap

template<short NumStrings, class ParamValue>
std::unordered_map<KeyType, size_t, TupleStringHash<NumStrings> > TwoLevelParam< NumStrings, ParamValue >::tupleMap

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