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 1099 of file utilities.cpp.

Constructor & Destructor Documentation

◆ SubListGenerator() [1/2]

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

Definition at line 1128 of file utilities.cpp.

1128  {
1129 
1130  DEMAND( numSamps <= numElems );
1131 
1132  // make a record of all elements
1133  len = numElems;
1134  list = (int*) malloc(len * sizeof *list);
1135  for (int i=0; i<len; i++)
1136  list[i] = elems[i];
1137 
1138  // prepare sublist
1139  sublen = numSamps;
1140  createSublist();
1141  prepareSublist();
1142  }

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 1144 of file utilities.cpp.

1147  {
1148  // extract all generator elems
1149  vector<int> elems = vector<int>();
1150  do { elems.push_back(gen.get()); } while (gen.next());
1151 
1152  // make (int*) of non-excluded elems
1153  len = 0;
1154  list = (int*) malloc(elems.size() * sizeof *list);
1155  for (size_t i=0; i<elems.size(); i++) {
1156  int elem = elems[i];
1157  bool present = false;
1158  for (int j=0; j<numExclude; j++)
1159  if (elem == exclude[j]) {
1160  present = true;
1161  break;
1162  }
1163  if (!present)
1164  list[len++] = elem;
1165  }
1166 
1167  DEMAND( numSamps <= len );
1168 
1169  // prepare sublist
1170  sublen = numSamps;
1171  createSublist();
1172  prepareSublist();
1173  }

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

◆ ~SubListGenerator()

SubListGenerator::~SubListGenerator ( )
inline

Definition at line 1194 of file utilities.cpp.

1194  {
1195  free(list);
1196  free(sublist);
1197  }

References list, and sublist.

Member Function Documentation

◆ createSublist()

void SubListGenerator::createSublist ( )
inlineprivate

Definition at line 1106 of file utilities.cpp.

1106  {
1107 
1108  // sublist to send to the user
1109  sublist = (int*) malloc(sublen * sizeof *sublist);
1110 
1111  // indicates which list members are currently in sublist
1112  featured = vector<bool>(len);
1113  fill(featured.end() - sublen, featured.end(), true);
1114  }

References featured, len, sublen, and sublist.

Referenced by SubListGenerator().

◆ get()

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

Definition at line 1175 of file utilities.cpp.

1175  {
1176  return sublist;
1177  }

References sublist.

◆ next()

bool SubListGenerator::next ( )
inlineoverride

Definition at line 1179 of file utilities.cpp.

1179  {
1180 
1181  // offer next permutation of the current combination
1182  if (next_permutation(sublist, sublist+sublen))
1183  return true;
1184 
1185  // else generate the next combination
1186  if (next_permutation(featured.begin(), featured.end())) {
1187  prepareSublist();
1188  return true;
1189  }
1190 
1191  return false;
1192  }

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

◆ prepareSublist()

void SubListGenerator::prepareSublist ( )
inlineprivate

Definition at line 1116 of file utilities.cpp.

1116  {
1117 
1118  // choose the next combination
1119  int j=0;
1120  for (int i=0; i<len; i++)
1121  if (featured[i])
1122  sublist[j++] = list[i];
1123 
1124  // prepare for permuting
1125  std::sort(sublist, sublist+sublen);
1126  }

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

Referenced by next(), and SubListGenerator().

Field Documentation

◆ featured

vector<bool> SubListGenerator::featured
private

Definition at line 1104 of file utilities.cpp.

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

◆ len

int SubListGenerator::len
private

Definition at line 1102 of file utilities.cpp.

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

◆ list

int* SubListGenerator::list
private

Definition at line 1100 of file utilities.cpp.

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

◆ sublen

int SubListGenerator::sublen
private

Definition at line 1103 of file utilities.cpp.

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

◆ sublist

int* SubListGenerator::sublist
private

Definition at line 1101 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:1104
#define DEMAND(cond)
Definition: utilities.cpp:24