A platform for high-performance distributed tool and library development written in C++. It can be deployed in two different cluster modes: standalone or distributed. API for v0.5.0, released on June 13, 2018.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
TupleSetIterator.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * *
3  * Copyright 2018 Rice University *
4  * *
5  * Licensed under the Apache License, Version 2.0 (the "License"); *
6  * you may not use this file except in compliance with the License. *
7  * You may obtain a copy of the License at *
8  * *
9  * http://www.apache.org/licenses/LICENSE-2.0 *
10  * *
11  * Unless required by applicable law or agreed to in writing, software *
12  * distributed under the License is distributed on an "AS IS" BASIS, *
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
14  * See the License for the specific language governing permissions and *
15  * limitations under the License. *
16  * *
17  *****************************************************************************/
18 
19 #ifndef TUPLE_SET_ITER_H
20 #define TUPLE_SET_ITER_H
21 
22 namespace pdb {
23 
24 // this class iterates over an input pdb :: Vector, breaking it up into a series of TupleSet objects
26 
27 private:
29  size_t chunkSize;
30  size_t pos;
32 
33 public:
35  : iterateOverMe(iterateOverMe), chunkSize(chunkSize) {
36  output = std::make_shared<TupleSet>();
37  std::vector<Handle<Object>>* inputColumn = new std::vector<Handle<Object>>;
38  output->addColumn(0, inputColumn, true);
39  pos = 0;
40  }
41 
42  // returns the next tuple set to process, or nullptr if there is not one to process
44  if (pos == iterateOverMe->size())
45  return nullptr;
46 
47  int numSlotsToIterate = chunkSize;
48  if (numSlotsToIterate + pos > iterateOverMe->size()) {
49  numSlotsToIterate = iterateOverMe->size() - pos;
50  }
51 
52  std::vector<Handle<Object>>& inputColumn = output->getColumn<Handle<Object>>(0);
53  inputColumn.resize(numSlotsToIterate);
54  for (int i = 0; i < numSlotsToIterate; i++) {
55  inputColumn[i] = (*iterateOverMe)[pos];
56  pos++;
57  }
58 
59  return output;
60  }
61 };
62 }
63 
64 #endif
Handle< Vector< Handle< Object > > > & iterateOverMe
TupleSetIterator(Handle< Vector< Handle< Object >>> &iterateOverMe, size_t chunkSize)
std::shared_ptr< TupleSet > TupleSetPtr
Definition: TupleSet.h:64
TupleSetPtr getNextTupleSet()