SetIteratorEncodingNode * EncodingSubGraph::nodeIterator() {
return nodes.iterator();
}
+
+uint EncodingSubGraph::computeIntersection(Set *s) {
+ uint intersect=0;
+ uint size=s->getSize();
+ for(uint i=0; i<size; i++) {
+ uint64_t val=s->getElement(i);
+ if (values.contains(val))
+ intersect++;
+ }
+ return intersect;
+}
+
+uint EncodingSubGraph::computeIntersection(EncodingSubGraph *g) {
+ if (g->values.getSize() > values.getSize()) {
+ //iterator over smaller set
+ return g->computeIntersection(this);
+ }
+
+ uint intersect=0;
+ SetIterator64Int * iter=g->values.iterator();
+ while(iter->hasNext()) {
+ uint64_t val=iter->next();
+ if (values.contains(val))
+ intersect++;
+ }
+ delete iter;
+ return intersect;
+}
EncodingSubGraph();
void addNode(EncodingNode *n);
SetIteratorEncodingNode * nodeIterator();
+ uint computeIntersection(Set *s);
+ uint computeIntersection(EncodingSubGraph *g);
CMEMALLOC;
private:
friend class EncodingGraph;
};
-
-
#endif
typedef Hashset<Element *, uintptr_t, PTRSHIFT> HashsetElement;
typedef SetIterator<Boolean *, uintptr_t, PTRSHIFT> SetIteratorBoolean;
typedef Hashset<uint64_t, uint64_t, 0> Hashset64Int;
+typedef SetIterator<uint64_t, uint64_t, 0> SetIterator64Int;
typedef Hashtable<OrderNode *, HashsetOrderNode *, uintptr_t, PTRSHIFT> HashtableNodeToNodeSet;