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 520 of file structures.h.

Constructor & Destructor Documentation

◆ ExclusionSignature() [1/2]

ExclusionSignature::ExclusionSignature ( )
inline

Definition at line 530 of file structures.h.

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

530  {
531  fullExclCnt = modExclCnt = 0;
532  fullOffset = modOffset = NULL;
533 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
534  allExclCnt = 0;
535  allTuples = NULL;
536 #endif
537  }
TupleSignature * allTuples
Definition: structures.h:527

◆ ExclusionSignature() [2/2]

ExclusionSignature::ExclusionSignature ( const ExclusionSignature sig)
inline

Definition at line 538 of file structures.h.

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

538  {
539  fullOffset = modOffset = NULL;
540  fullExclCnt = sig.fullExclCnt;
541  if(fullExclCnt>0){
542  fullOffset = new int[fullExclCnt];
543  for(int i=0; i<fullExclCnt; i++)
544  fullOffset[i] = sig.fullOffset[i];
545  }
546 
547  modExclCnt = sig.modExclCnt;
548  if(modExclCnt>0){
549  modOffset = new int[modExclCnt];
550  for(int i=0; i<modExclCnt; i++)
551  modOffset[i] = sig.modOffset[i];
552  }
553 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
554  allTuples = NULL;
555  allExclCnt = sig.allExclCnt;
556  if(allExclCnt>0){
558  for(int i=0; i<allExclCnt; i++)
559  allTuples[i] = sig.allTuples[i];
560  }
561 #endif
562  }
TupleSignature * allTuples
Definition: structures.h:527

◆ ~ExclusionSignature()

ExclusionSignature::~ExclusionSignature ( )
inline

Definition at line 563 of file structures.h.

References allTuples, fullOffset, and modOffset.

563  {
564  if(fullOffset) delete [] fullOffset;
565  if(modOffset) delete [] modOffset;
566 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
567  if(allTuples) delete [] allTuples;
568 #endif
569  }
TupleSignature * allTuples
Definition: structures.h:527

Member Function Documentation

◆ buildTuples()

void ExclusionSignature::buildTuples ( )
inline

Definition at line 632 of file structures.h.

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

Referenced by setOffsets().

632  {
633  delete [] allTuples;
634  allTuples = NULL;
635  allExclCnt = 0;
636  for(int i=0; i<fullExclCnt; i++)
637  if ( fullOffset[i] > 0 ) ++allExclCnt;
638  for(int i=0; i<modExclCnt; i++)
639  if ( modOffset[i] > 0 ) ++allExclCnt;
640  if(allExclCnt>0){
642  int j = 0;
643  for(int i=0; i<fullExclCnt; i++){
644  if ( fullOffset[i] <= 0 ) continue;
645  TupleSignature oneSig(1,EXCLUSION,0);
646  oneSig.offset[0] = fullOffset[i];
647  allTuples[j++] = oneSig;
648  }
649  for(int i=0; i<modExclCnt; i++){
650  if ( modOffset[i] <= 0 ) continue;
651  TupleSignature oneSig(1,EXCLUSION,1);
652  oneSig.offset[0] = modOffset[i];
653  allTuples[j++] = oneSig;
654  }
655  }
656 #endif
657  }
TupleSignature * allTuples
Definition: structures.h:527

◆ findOffset()

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

◆ hash()

int ExclusionSignature::hash ( void  ) const
inline

Definition at line 659 of file structures.h.

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

659  {
660  unsigned int numOffset = fullExclCnt + modExclCnt;
661  unsigned int code = 0x12345678;
662  unsigned int codesz = 8 * sizeof(int);
663  unsigned int shift = codesz / numOffset;
664 
665  if (shift == 0) shift=1;
666  unsigned int i;
667  for(i=0; i < fullExclCnt; i++) {
668  code = circShift(code,shift);
669  code ^= fullOffset[i];
670  }
671  for(i=0; i < modExclCnt; i++) {
672  code = circShift(code,shift);
673  code ^= modOffset[i];
674  }
675  return code;
676  }
unsigned int circShift(unsigned int h, unsigned int by)
Definition: structures.h:188

◆ operator=()

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

Definition at line 571 of file structures.h.

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

571  {
572  fullExclCnt = sig.fullExclCnt;
573  if(fullOffset) delete [] fullOffset;
574  if(fullExclCnt>0){
575  fullOffset = new int[fullExclCnt];
576  for(int i=0; i<fullExclCnt; i++)
577  fullOffset[i] = sig.fullOffset[i];
578  }else
579  fullOffset = NULL;
580 
581  modExclCnt = sig.modExclCnt;
582  if(modOffset) delete [] modOffset;
583  if(modExclCnt>0){
584  modOffset = new int[modExclCnt];
585  for(int i=0; i<modExclCnt; i++)
586  modOffset[i] = sig.modOffset[i];
587  }else
588  modOffset = NULL;
589 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
590  allExclCnt = sig.allExclCnt;
591  if(allTuples) delete [] allTuples;
592  if(allExclCnt>0){
594  for(int i=0; i<allExclCnt; i++)
595  allTuples[i] = sig.allTuples[i];
596  }else
597  allTuples = NULL;
598 #endif
599 
600  return *this;
601  }
TupleSignature * allTuples
Definition: structures.h:527

◆ operator==()

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

Definition at line 602 of file structures.h.

References fullExclCnt, fullOffset, modExclCnt, and modOffset.

602  {
603  if(fullExclCnt!=sig.fullExclCnt) return 0;
604  if(modExclCnt!=sig.modExclCnt) return 0;
605 
606  for(int i=0; i<fullExclCnt; i++){
607  if(fullOffset[i]!=sig.fullOffset[i]) return 0;
608  }
609  for(int i=0; i<modExclCnt; i++){
610  if(modOffset[i]!=sig.modOffset[i]) return 0;
611  }
612  return 1;
613  }

◆ 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 615 of file structures.h.

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

615  {
616  fullExclCnt = fullVec.size();
617  modExclCnt = modVec.size();
618  if(fullExclCnt>0) {
619  fullOffset = new int[fullExclCnt];
620  for(int i=0; i<fullExclCnt; i++)
621  fullOffset[i] = fullVec[i];
622  }
623 
624  if(modExclCnt>0) {
625  modOffset = new int[modExclCnt];
626  for(int i=0; i<modExclCnt; i++)
627  modOffset[i] = modVec[i];
628  }
629 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
630  buildTuples();
631  }

◆ unpack()

void ExclusionSignature::unpack ( MIStream msg)

Member Data Documentation

◆ allExclCnt

int ExclusionSignature::allExclCnt

Definition at line 526 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: