Inheritance diagram for SubListGenerator:

Public Member Functions

int *const & get () const override
 
bool next () override
 
 SubListGenerator (Catch::Generators::GeneratorWrapper< int > &&gen, int numSamps, const int *exclude, int numExclude)
 
 SubListGenerator (int *elems, int numElems, int numSamps)
 
 ~SubListGenerator ()
 

Private Member Functions

void createSublist ()
 
void prepareSublist ()
 

Private Attributes

vector< bool > featured
 
int len
 
int * list
 
int sublen
 
int * sublist
 

Detailed Description

Definition at line 974 of file utilities.cpp.

Constructor & Destructor Documentation

◆ SubListGenerator() [1/2]

SubListGenerator::SubListGenerator ( int *  elems,
int  numElems,
int  numSamps 
)
inline

Definition at line 1003 of file utilities.cpp.

1003  {
1004 
1005  DEMAND( numSamps <= numElems );
1006 
1007  // make a record of all elements
1008  len = numElems;
1009  list = (int*) malloc(len * sizeof *list);
1010  for (int i=0; i<len; i++)
1011  list[i] = elems[i];
1012 
1013  // prepare sublist
1014  sublen = numSamps;
1015  createSublist();
1016  prepareSublist();
1017  }

References createSublist(), DEMAND, len, list, prepareSublist(), and sublen.

◆ SubListGenerator() [2/2]

SubListGenerator::SubListGenerator ( Catch::Generators::GeneratorWrapper< int > &&  gen,
int  numSamps,
const int *  exclude,
int  numExclude 
)
inline

Definition at line 1019 of file utilities.cpp.

1022  {
1023  // extract all generator elems
1024  vector<int> elems = vector<int>();
1025  do { elems.push_back(gen.get()); } while (gen.next());
1026 
1027  // make (int*) of non-excluded elems
1028  len = 0;
1029  list = (int*) malloc(elems.size() * sizeof *list);
1030  for (size_t i=0; i<elems.size(); i++) {
1031  int elem = elems[i];
1032  bool present = false;
1033  for (int j=0; j<numExclude; j++)
1034  if (elem == exclude[j]) {
1035  present = true;
1036  break;
1037  }
1038  if (!present)
1039  list[len++] = elem;
1040  }
1041 
1042  DEMAND( numSamps <= len );
1043 
1044  // prepare sublist
1045  sublen = numSamps;
1046  createSublist();
1047  prepareSublist();
1048  }

References createSublist(), DEMAND, len, list, prepareSublist(), and sublen.

◆ ~SubListGenerator()

SubListGenerator::~SubListGenerator ( )
inline

Definition at line 1069 of file utilities.cpp.

1069  {
1070  free(list);
1071  free(sublist);
1072  }

References list, and sublist.

Member Function Documentation

◆ createSublist()

void SubListGenerator::createSublist ( )
inlineprivate

Definition at line 981 of file utilities.cpp.

981  {
982 
983  // sublist to send to the user
984  sublist = (int*) malloc(sublen * sizeof *sublist);
985 
986  // indicates which list members are currently in sublist
987  featured = vector<bool>(len);
988  fill(featured.end() - sublen, featured.end(), true);
989  }

References featured, len, sublen, and sublist.

Referenced by SubListGenerator().

◆ get()

int* const& SubListGenerator::get ( ) const
inlineoverride

Definition at line 1050 of file utilities.cpp.

1050  {
1051  return sublist;
1052  }

References sublist.

◆ next()

bool SubListGenerator::next ( )
inlineoverride

Definition at line 1054 of file utilities.cpp.

1054  {
1055 
1056  // offer next permutation of the current combination
1057  if (next_permutation(sublist, sublist+sublen))
1058  return true;
1059 
1060  // else generate the next combination
1061  if (next_permutation(featured.begin(), featured.end())) {
1062  prepareSublist();
1063  return true;
1064  }
1065 
1066  return false;
1067  }

References featured, prepareSublist(), sublen, and sublist.

◆ prepareSublist()

void SubListGenerator::prepareSublist ( )
inlineprivate

Definition at line 991 of file utilities.cpp.

991  {
992 
993  // choose the next combination
994  int j=0;
995  for (int i=0; i<len; i++)
996  if (featured[i])
997  sublist[j++] = list[i];
998 
999  // prepare for permuting
1000  std::sort(sublist, sublist+sublen);
1001  }

References featured, len, list, sublen, and sublist.

Referenced by next(), and SubListGenerator().

Field Documentation

◆ featured

vector<bool> SubListGenerator::featured
private

Definition at line 979 of file utilities.cpp.

Referenced by createSublist(), next(), and prepareSublist().

◆ len

int SubListGenerator::len
private

Definition at line 977 of file utilities.cpp.

Referenced by createSublist(), prepareSublist(), and SubListGenerator().

◆ list

int* SubListGenerator::list
private

Definition at line 975 of file utilities.cpp.

Referenced by prepareSublist(), SubListGenerator(), and ~SubListGenerator().

◆ sublen

int SubListGenerator::sublen
private

Definition at line 978 of file utilities.cpp.

Referenced by createSublist(), next(), prepareSublist(), and SubListGenerator().

◆ sublist

int* SubListGenerator::sublist
private

Definition at line 976 of file utilities.cpp.

Referenced by createSublist(), get(), next(), prepareSublist(), and ~SubListGenerator().


The documentation for this class was generated from the following file:
vector< bool > featured
Definition: utilities.cpp:979
void prepareSublist()
Definition: utilities.cpp:991
void createSublist()
Definition: utilities.cpp:981
#define DEMAND(cond)
Definition: utilities.cpp:24