NAMD
Public Member Functions | Public Attributes | List of all members
ExclusionSignature Struct Reference

#include <structures.h>

Public Member Functions

 ExclusionSignature ()
 
 ExclusionSignature (const ExclusionSignature &sig)
 
 ~ExclusionSignature ()
 
ExclusionSignatureoperator= (const ExclusionSignature &sig)
 
int operator== (const ExclusionSignature &sig) const
 
void setOffsets (std::vector< int > &fullVec, std::vector< int > &modVec)
 
void buildTuples ()
 
int hash () const
 
void removeEmptyOffset ()
 
int findOffset (int offset, int *fullOrMod)
 
void pack (MOStream *msg)
 
void unpack (MIStream *msg)
 

Public Attributes

int fullExclCnt
 
int * fullOffset
 
int modExclCnt
 
int * modOffset
 
int allExclCnt
 
TupleSignatureallTuples
 

Detailed Description

Definition at line 528 of file structures.h.

Constructor & Destructor Documentation

◆ ExclusionSignature() [1/2]

ExclusionSignature::ExclusionSignature ( )
inline

Definition at line 538 of file structures.h.

References allExclCnt, allTuples, fullExclCnt, fullOffset, modExclCnt, and modOffset.

538  {
539  fullExclCnt = modExclCnt = 0;
540  fullOffset = modOffset = NULL;
541 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
542  allExclCnt = 0;
543  allTuples = NULL;
544 #endif
545  }
TupleSignature * allTuples
Definition: structures.h:535

◆ ExclusionSignature() [2/2]

ExclusionSignature::ExclusionSignature ( const ExclusionSignature sig)
inline

Definition at line 546 of file structures.h.

References allExclCnt, allTuples, fullExclCnt, fullOffset, modExclCnt, and modOffset.

546  {
547  fullOffset = modOffset = NULL;
548  fullExclCnt = sig.fullExclCnt;
549  if(fullExclCnt>0){
550  fullOffset = new int[fullExclCnt];
551  for(int i=0; i<fullExclCnt; i++)
552  fullOffset[i] = sig.fullOffset[i];
553  }
554 
555  modExclCnt = sig.modExclCnt;
556  if(modExclCnt>0){
557  modOffset = new int[modExclCnt];
558  for(int i=0; i<modExclCnt; i++)
559  modOffset[i] = sig.modOffset[i];
560  }
561 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
562  allTuples = NULL;
563  allExclCnt = sig.allExclCnt;
564  if(allExclCnt>0){
566  for(int i=0; i<allExclCnt; i++)
567  allTuples[i] = sig.allTuples[i];
568  }
569 #endif
570  }
TupleSignature * allTuples
Definition: structures.h:535

◆ ~ExclusionSignature()

ExclusionSignature::~ExclusionSignature ( )
inline

Definition at line 571 of file structures.h.

References allTuples, fullOffset, and modOffset.

571  {
572  if(fullOffset) delete [] fullOffset;
573  if(modOffset) delete [] modOffset;
574 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
575  if(allTuples) delete [] allTuples;
576 #endif
577  }
TupleSignature * allTuples
Definition: structures.h:535

Member Function Documentation

◆ buildTuples()

void ExclusionSignature::buildTuples ( )
inline

Definition at line 640 of file structures.h.

References allExclCnt, allTuples, EXCLUSION, fullExclCnt, fullOffset, modExclCnt, modOffset, and TupleSignature::offset.

Referenced by setOffsets().

640  {
641  delete [] allTuples;
642  allTuples = NULL;
643  allExclCnt = 0;
644  for(int i=0; i<fullExclCnt; i++)
645  if ( fullOffset[i] > 0 ) ++allExclCnt;
646  for(int i=0; i<modExclCnt; i++)
647  if ( modOffset[i] > 0 ) ++allExclCnt;
648  if(allExclCnt>0){
650  int j = 0;
651  for(int i=0; i<fullExclCnt; i++){
652  if ( fullOffset[i] <= 0 ) continue;
653  TupleSignature oneSig(1,EXCLUSION,0);
654  oneSig.offset[0] = fullOffset[i];
655  allTuples[j++] = oneSig;
656  }
657  for(int i=0; i<modExclCnt; i++){
658  if ( modOffset[i] <= 0 ) continue;
659  TupleSignature oneSig(1,EXCLUSION,1);
660  oneSig.offset[0] = modOffset[i];
661  allTuples[j++] = oneSig;
662  }
663  }
664 #endif
665  }
TupleSignature * allTuples
Definition: structures.h:535

◆ findOffset()

int ExclusionSignature::findOffset ( int  offset,
int *  fullOrMod 
)

◆ hash()

int ExclusionSignature::hash ( void  ) const
inline

Definition at line 667 of file structures.h.

References circShift(), fullExclCnt, fullOffset, modExclCnt, and modOffset.

667  {
668  unsigned int numOffset = fullExclCnt + modExclCnt;
669  unsigned int code = 0x12345678;
670  unsigned int codesz = 8 * sizeof(int);
671  unsigned int shift = codesz / numOffset;
672 
673  if (shift == 0) shift=1;
674  unsigned int i;
675  for(i=0; i < fullExclCnt; i++) {
676  code = circShift(code,shift);
677  code ^= fullOffset[i];
678  }
679  for(i=0; i < modExclCnt; i++) {
680  code = circShift(code,shift);
681  code ^= modOffset[i];
682  }
683  return code;
684  }
unsigned int circShift(unsigned int h, unsigned int by)
Definition: structures.h:196

◆ operator=()

ExclusionSignature& ExclusionSignature::operator= ( const ExclusionSignature sig)
inline

Definition at line 579 of file structures.h.

References allExclCnt, allTuples, fullExclCnt, fullOffset, modExclCnt, and modOffset.

579  {
580  fullExclCnt = sig.fullExclCnt;
581  if(fullOffset) delete [] fullOffset;
582  if(fullExclCnt>0){
583  fullOffset = new int[fullExclCnt];
584  for(int i=0; i<fullExclCnt; i++)
585  fullOffset[i] = sig.fullOffset[i];
586  }else
587  fullOffset = NULL;
588 
589  modExclCnt = sig.modExclCnt;
590  if(modOffset) delete [] modOffset;
591  if(modExclCnt>0){
592  modOffset = new int[modExclCnt];
593  for(int i=0; i<modExclCnt; i++)
594  modOffset[i] = sig.modOffset[i];
595  }else
596  modOffset = NULL;
597 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
598  allExclCnt = sig.allExclCnt;
599  if(allTuples) delete [] allTuples;
600  if(allExclCnt>0){
602  for(int i=0; i<allExclCnt; i++)
603  allTuples[i] = sig.allTuples[i];
604  }else
605  allTuples = NULL;
606 #endif
607 
608  return *this;
609  }
TupleSignature * allTuples
Definition: structures.h:535

◆ operator==()

int ExclusionSignature::operator== ( const ExclusionSignature sig) const
inline

Definition at line 610 of file structures.h.

References fullExclCnt, fullOffset, modExclCnt, and modOffset.

610  {
611  if(fullExclCnt!=sig.fullExclCnt) return 0;
612  if(modExclCnt!=sig.modExclCnt) return 0;
613 
614  for(int i=0; i<fullExclCnt; i++){
615  if(fullOffset[i]!=sig.fullOffset[i]) return 0;
616  }
617  for(int i=0; i<modExclCnt; i++){
618  if(modOffset[i]!=sig.modOffset[i]) return 0;
619  }
620  return 1;
621  }

◆ pack()

void ExclusionSignature::pack ( MOStream msg)

◆ removeEmptyOffset()

void ExclusionSignature::removeEmptyOffset ( )

◆ setOffsets()

void ExclusionSignature::setOffsets ( std::vector< int > &  fullVec,
std::vector< int > &  modVec 
)
inline

Definition at line 623 of file structures.h.

References buildTuples(), fullExclCnt, fullOffset, modExclCnt, and modOffset.

623  {
624  fullExclCnt = fullVec.size();
625  modExclCnt = modVec.size();
626  if(fullExclCnt>0) {
627  fullOffset = new int[fullExclCnt];
628  for(int i=0; i<fullExclCnt; i++)
629  fullOffset[i] = fullVec[i];
630  }
631 
632  if(modExclCnt>0) {
633  modOffset = new int[modExclCnt];
634  for(int i=0; i<modExclCnt; i++)
635  modOffset[i] = modVec[i];
636  }
637 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
638  buildTuples();
639  }

◆ unpack()

void ExclusionSignature::unpack ( MIStream msg)

Member Data Documentation

◆ allExclCnt

int ExclusionSignature::allExclCnt

Definition at line 534 of file structures.h.

Referenced by buildTuples(), ExclusionSignature(), ExclElem::getTupleInfo(), and operator=().

◆ allTuples

TupleSignature* ExclusionSignature::allTuples

◆ fullExclCnt

int ExclusionSignature::fullExclCnt

◆ fullOffset

int* ExclusionSignature::fullOffset

◆ modExclCnt

int ExclusionSignature::modExclCnt

◆ modOffset

int* ExclusionSignature::modOffset

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