souffle  2.0.2-371-g6315b36
Data Structures | Public Types | Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes
souffle::EquivalenceRelation< TupleType > Class Template Reference

#include <EquivalenceRelation.h>

Collaboration diagram for souffle::EquivalenceRelation< TupleType >:
Collaboration graph

Data Structures

class  iterator
 
struct  operation_hints
 A collection of operation hints speeding up some of the involved operations by exploiting temporal locality. More...
 

Public Types

using element_type = TupleType
 

Public Member Functions

iterator anteriorIt (value_type anteriorVal) const
 Creates an iterator that generates all pairs (A, X) for a given A, and X are elements within A's disjoint set. More...
 
iterator antpostit (value_type anteriorVal, value_type posteriorVal) const
 Creates an iterator that generates the pair (A, B) for a given A and B. More...
 
iterator begin () const
 iterator pointing to the beginning of the tuples, with no restrictions More...
 
void clear ()
 Empty the relation. More...
 
iterator closure (value_type rep) const
 Begin an iterator over all pairs within a single disjoint set - This is used for partition(). More...
 
bool contains (const TupleType &tuple) const
 
bool contains (const TupleType &tuple, operation_hints &) const
 Returns whether there exists given tuple. More...
 
bool contains (value_type x, value_type y) const
 Returns whether there exists a pair with these two nodes. More...
 
bool empty () const
 Check emptiness. More...
 
void emptyPartition () const
 
iterator end () const
 iterator pointing to the end of the tuples More...
 
 EquivalenceRelation ()
 
void extend (const EquivalenceRelation< TupleType > &other)
 Extend this relation with another relation, expanding this equivalence relation The supplied relation is the old knowledge, whilst this relation only contains explicitly new knowledge. More...
 
iterator find (const TupleType &, operation_hints &) const
 
iterator find (const TupleType &t) const
 
template<unsigned levels>
range< iteratorgetBoundaries (const TupleType &entry) const
 Obtains a range of elements matching the prefix of the given entry up to levels elements. More...
 
template<unsigned levels>
range< iteratorgetBoundaries (const TupleType &entry, operation_hints &) const
 Obtains a range of elements matching the prefix of the given entry up to levels elements. More...
 
bool insert (const TupleType &tuple)
 Insert the tuple symbolically. More...
 
bool insert (value_type x, value_type y)
 Insert the two values symbolically as a binary relation. More...
 
bool insert (value_type x, value_type y, operation_hints)
 Insert the two values symbolically as a binary relation. More...
 
void insertAll (const EquivalenceRelation< TupleType > &other)
 inserts all nodes from the other relation into this one More...
 
iterator lower_bound (const TupleType &entry) const
 
iterator lower_bound (const TupleType &entry, operation_hints &) const
 Act similar to getBoundaries. More...
 
std::vector< souffle::range< iterator > > partition (size_t chunks) const
 Generate an approximate number of iterators for parallel iteration The iterators returned are not necessarily equal in size, but in practise are approximately similarly sized Depending on the structure of the data, there can be more or less partitions returned than requested. More...
 
size_t size () const
 Size of relation. More...
 
iterator upper_bound (const TupleType &, operation_hints &) const
 This function is only here in order to unify interfaces in InterpreterIndex. More...
 
iterator upper_bound (const TupleType &entry) const
 
 ~EquivalenceRelation ()
 

Protected Member Functions

bool containsElement (value_type e) const
 

Private Types

using StatesBucket = StatesList *
 
using StatesList = souffle::PiggyList< value_type >
 
using StatesMap = souffle::LambdaBTreeSet< StorePair, std::function< StatesBucket(StorePair &)>, souffle::EqrelMapComparator< StorePair > >
 
using StorePair = std::pair< value_type, StatesBucket >
 
using value_type = typename TupleType::value_type
 

Private Member Functions

void genAllDisjointSetLists () const
 Generate a cache of the sets such that they can be iterated over efficiently. More...
 

Private Attributes

StatesMap equivalencePartition
 
souffle::SparseDisjointSet< value_typesds
 
std::shared_mutex statesLock
 
std::atomic< bool > statesMapStale
 

Detailed Description

template<typename TupleType>
class souffle::EquivalenceRelation< TupleType >

Definition at line 50 of file EquivalenceRelation.h.

Member Typedef Documentation

◆ element_type

template<typename TupleType >
using souffle::EquivalenceRelation< TupleType >::element_type = TupleType

Definition at line 70 of file EquivalenceRelation.h.

◆ StatesBucket

template<typename TupleType >
using souffle::EquivalenceRelation< TupleType >::StatesBucket = StatesList*
private

Definition at line 64 of file EquivalenceRelation.h.

◆ StatesList

template<typename TupleType >
using souffle::EquivalenceRelation< TupleType >::StatesList = souffle::PiggyList<value_type>
private

Definition at line 63 of file EquivalenceRelation.h.

◆ StatesMap

template<typename TupleType >
using souffle::EquivalenceRelation< TupleType >::StatesMap = souffle::LambdaBTreeSet<StorePair, std::function<StatesBucket(StorePair&)>, souffle::EqrelMapComparator<StorePair> >
private

Definition at line 67 of file EquivalenceRelation.h.

◆ StorePair

template<typename TupleType >
using souffle::EquivalenceRelation< TupleType >::StorePair = std::pair<value_type, StatesBucket>
private

Definition at line 65 of file EquivalenceRelation.h.

◆ value_type

template<typename TupleType >
using souffle::EquivalenceRelation< TupleType >::value_type = typename TupleType::value_type
private

Definition at line 59 of file EquivalenceRelation.h.

Constructor & Destructor Documentation

◆ EquivalenceRelation()

template<typename TupleType >
souffle::EquivalenceRelation< TupleType >::EquivalenceRelation ( )
inline

Definition at line 72 of file EquivalenceRelation.h.

78 {

◆ ~EquivalenceRelation()

template<typename TupleType >
souffle::EquivalenceRelation< TupleType >::~EquivalenceRelation ( )
inline

Definition at line 73 of file EquivalenceRelation.h.

78  {

Member Function Documentation

◆ anteriorIt()

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::anteriorIt ( value_type  anteriorVal) const
inline

Creates an iterator that generates all pairs (A, X) for a given A, and X are elements within A's disjoint set.

Parameters
anteriorValThe first value of the tuple to be generated for
Returns
the iterator representing this.

Definition at line 619 of file EquivalenceRelation.h.

619  : the B value of the tuple
620  * @return the iterator representing this
621  */
622  iterator antpostit(value_type anteriorVal, value_type posteriorVal) const {
623  // obv if they're in diff sets, then iteration for this pair just ends.
624  if (!sds.sameSet(anteriorVal, posteriorVal)) return end();
625 
627 
628  // locate the blocklist that the val resides in

Referenced by souffle::EquivalenceRelation< Arity >::getBoundaries(), and souffle::EquivalenceRelation< Arity >::partition().

◆ antpostit()

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::antpostit ( value_type  anteriorVal,
value_type  posteriorVal 
) const
inline

Creates an iterator that generates the pair (A, B) for a given A and B.

If A and B don't exist, or aren't in the same set, then the end() iterator is returned.

Parameters
anteriorValthe A value of the tuple
posteriorValthe B value of the tuple
Returns
the iterator representing this

Definition at line 638 of file EquivalenceRelation.h.

640  {
642 
643  // locate the blocklist that the val resides in
644  auto found = equivalencePartition.find({sds.findNode(rep), nullptr});
645  return iterator(this, (*found).second);
646  }
647 
648  /**
649  * Generate an approximate number of iterators for parallel iteration

◆ begin()

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::begin ( ) const
inline

iterator pointing to the beginning of the tuples, with no restrictions

Returns
the iterator that corresponds to the beginning of the binary relation

Definition at line 480 of file EquivalenceRelation.h.

486  {

Referenced by souffle::EquivalenceRelation< Arity >::closure(), and souffle::EquivalenceRelation< Arity >::getBoundaries().

◆ clear()

template<typename TupleType >
void souffle::EquivalenceRelation< TupleType >::clear ( )
inline

Empty the relation.

Definition at line 229 of file EquivalenceRelation.h.

232  : this->equivalencePartition) {
233  const size_t s = e.second->size();
234  retVal += s * s;
235  }
236 

◆ closure()

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::closure ( value_type  rep) const
inline

Begin an iterator over all pairs within a single disjoint set - This is used for partition().

Parameters
repthe representative of (or element within) a disjoint set of which to generate all pairs
Returns
an iterator that will generate all pairs within the disjoint set

Definition at line 656 of file EquivalenceRelation.h.

656  {
657  // generate all reps
659 
660  size_t numPairs = this->size();
661  if (numPairs == 0) return {};
662  if (numPairs == 1 || chunks <= 1) return {souffle::make_range(begin(), end())};

Referenced by souffle::EquivalenceRelation< Arity >::closure(), and souffle::EquivalenceRelation< Arity >::partition().

◆ contains() [1/3]

template<typename TupleType >
bool souffle::EquivalenceRelation< TupleType >::contains ( const TupleType &  tuple) const
inline

Definition at line 211 of file EquivalenceRelation.h.

213  {

◆ contains() [2/3]

template<typename TupleType >
bool souffle::EquivalenceRelation< TupleType >::contains ( const TupleType &  tuple,
operation_hints  
) const
inline

Returns whether there exists given tuple.

Parameters
tupleThe tuple to search for.

Definition at line 207 of file EquivalenceRelation.h.

213  {

◆ contains() [3/3]

template<typename TupleType >
bool souffle::EquivalenceRelation< TupleType >::contains ( value_type  x,
value_type  y 
) const
inline

Returns whether there exists a pair with these two nodes.

Parameters
xfront of pair
yback of pair

Definition at line 199 of file EquivalenceRelation.h.

199  {
200  // delete the beautiful values inside (they're raw ptrs, so they need to be.)
201  for (auto& pair : equivalencePartition) {

Referenced by souffle::EquivalenceRelation< Arity >::insert().

◆ containsElement()

template<typename TupleType >
bool souffle::EquivalenceRelation< TupleType >::containsElement ( value_type  e) const
inlineprotected

Definition at line 718 of file EquivalenceRelation.h.

722  {

◆ empty()

template<typename TupleType >
bool souffle::EquivalenceRelation< TupleType >::empty ( ) const
inline

Check emptiness.

Definition at line 609 of file EquivalenceRelation.h.

622  {

◆ emptyPartition()

template<typename TupleType >
void souffle::EquivalenceRelation< TupleType >::emptyPartition ( ) const
inline

Definition at line 215 of file EquivalenceRelation.h.

226  {

◆ end()

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::end ( ) const
inline

◆ extend()

template<typename TupleType >
void souffle::EquivalenceRelation< TupleType >::extend ( const EquivalenceRelation< TupleType > &  other)
inline

Extend this relation with another relation, expanding this equivalence relation The supplied relation is the old knowledge, whilst this relation only contains explicitly new knowledge.

After this operation the "implicitly new tuples" are now explicitly inserted this relation.

Definition at line 152 of file EquivalenceRelation.h.

153  {
154  value_type rep = other.sds.findNode(el);
155  if (repsCovered.count(rep) == 0) {
156  repsCovered.emplace(rep);
157  }
158  }
159  }
160  }
161 
162  // add the intersecting dj sets into this one
163  {
164  value_type el;
165  value_type rep;
166  auto it = other.sds.sparseToDenseMap.begin();
167  auto end = other.sds.sparseToDenseMap.end();
168  for (; it != end; ++it) {
169  std::tie(el, std::ignore) = *it;
170  rep = other.sds.findNode(el);
171  if (repsCovered.count(rep) != 0) {
172  this->insert(el, rep);
173  }
174  }
175  }
176  }
177 
178  /**
179  * Returns whether there exists a pair with these two nodes
180  * @param x front of pair
181  * @param y back of pair
182  */
183  bool contains(value_type x, value_type y) const {
184  return sds.contains(x, y);
185  }
186 
187  /**
188  * Returns whether there exists given tuple.
189  * @param tuple The tuple to search for.
190  */
191  bool contains(const TupleType& tuple, operation_hints&) const {
192  return contains(tuple[0], tuple[1]);

◆ find() [1/2]

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::find ( const TupleType &  ,
operation_hints  
) const
inline

Definition at line 707 of file EquivalenceRelation.h.

◆ find() [2/2]

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::find ( const TupleType &  t) const
inline

Definition at line 712 of file EquivalenceRelation.h.

◆ genAllDisjointSetLists()

template<typename TupleType >
void souffle::EquivalenceRelation< TupleType >::genAllDisjointSetLists ( ) const
inlineprivate

Generate a cache of the sets such that they can be iterated over efficiently.

Each set is partitioned into a PiggyList.

Definition at line 738 of file EquivalenceRelation.h.

739  {static_cast<value_type>(rep), nullptr};
740  StatesList* mapList = equivalencePartition.insert(p, [&](StorePair& sp) {
741  auto* r = new StatesList(1);
742  sp.second = r;
743  return r;
744  });
745  mapList->append(sparseVal);
746  }
747 
748  statesMapStale.store(false, std::memory_order_release);
749  statesLock.unlock();
750  }
751 };
752 } // namespace souffle

Referenced by souffle::EquivalenceRelation< Arity >::anteriorIt(), souffle::EquivalenceRelation< Arity >::antpostit(), souffle::EquivalenceRelation< Arity >::closure(), and souffle::EquivalenceRelation< Arity >::upper_bound().

◆ getBoundaries() [1/2]

template<typename TupleType >
template<unsigned levels>
range<iterator> souffle::EquivalenceRelation< TupleType >::getBoundaries ( const TupleType &  entry) const
inline

Obtains a range of elements matching the prefix of the given entry up to levels elements.

Template Parameters
levelsthe length of the requested matching prefix
Parameters
entrythe entry to be looking for
Returns
the corresponding range of matching elements

Definition at line 502 of file EquivalenceRelation.h.

502  {
503  // if nothing is bound => just use begin and end
504  if (levels == 0) return make_range(begin(), end());
505 

◆ getBoundaries() [2/2]

template<typename TupleType >
template<unsigned levels>
range<iterator> souffle::EquivalenceRelation< TupleType >::getBoundaries ( const TupleType &  entry,
operation_hints  
) const
inline

Obtains a range of elements matching the prefix of the given entry up to levels elements.

A operation context may be provided to exploit temporal locality.

Template Parameters
levelsthe length of the requested matching prefix
Parameters
entrythe entry to be looking for
ctxtthe operation context to be utilized
Returns
the corresponding range of matching elements

Definition at line 518 of file EquivalenceRelation.h.

541  {
542  if (entry[0] == MIN_RAM_SIGNED && entry[1] == MIN_RAM_SIGNED) {
543  // Return an iterator over all tuples.
544  return begin();
545  }
546 

◆ insert() [1/3]

template<typename TupleType >
bool souffle::EquivalenceRelation< TupleType >::insert ( const TupleType &  tuple)
inline

Insert the tuple symbolically.

Parameters
tupleThe tuple to be inserted
Returns
true if the tuple is new to the data structure

Definition at line 104 of file EquivalenceRelation.h.

112  {

◆ insert() [2/3]

template<typename TupleType >
bool souffle::EquivalenceRelation< TupleType >::insert ( value_type  x,
value_type  y 
)
inline

Insert the two values symbolically as a binary relation.

Parameters
xnode to be added/paired
ynode to be added/paired
Returns
true if the pair is new to the data structure

Definition at line 94 of file EquivalenceRelation.h.

100  {

Referenced by souffle::EquivalenceRelation< TupleType >::operation_hints::clear(), souffle::test::TEST(), and souffle::EquivalenceRelation< Arity >::~EquivalenceRelation().

◆ insert() [3/3]

template<typename TupleType >
bool souffle::EquivalenceRelation< TupleType >::insert ( value_type  x,
value_type  y,
operation_hints   
)
inline

Insert the two values symbolically as a binary relation.

Parameters
xnode to be added/paired
ynode to be added/paired
zthe hints to where the pair should be inserted (not applicable atm)
Returns
true if the pair is new to the data structure

Definition at line 116 of file EquivalenceRelation.h.

116  : other.equivalencePartition.getChunks(MAX_THREADS)) {
117  for (auto& p : it) {
118  value_type rep = p.first;
119  StatesList& pl = *p.second;
120  const size_t ksize = pl.size();
121  for (size_t i = 0; i < ksize; ++i) {
122  this->sds.unionNodes(rep, pl.get(i));

◆ insertAll()

template<typename TupleType >
void souffle::EquivalenceRelation< TupleType >::insertAll ( const EquivalenceRelation< TupleType > &  other)
inline

inserts all nodes from the other relation into this one

Parameters
otherthe binary relation from which to add elements from

Definition at line 128 of file EquivalenceRelation.h.

136  {
137  // nothing to extend if there's no new/original knowledge
138  if (other.size() == 0 || this->size() == 0) return;
139 
140  this->genAllDisjointSetLists();
141  other.genAllDisjointSetLists();
142 
143  std::set<value_type> repsCovered;
144 

◆ lower_bound() [1/2]

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::lower_bound ( const TupleType &  entry) const
inline

Definition at line 584 of file EquivalenceRelation.h.

585  {
586  operation_hints hints;
587  return upper_bound(entry, hints);

◆ lower_bound() [2/2]

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::lower_bound ( const TupleType &  entry,
operation_hints  
) const
inline

Act similar to getBoundaries.

But non-static. This function should be used ONLY by interpreter, and its behavior is tightly coupling with InterpreterIndex. Do Not rely on this interface outside the interpreter.

Parameters
entrythe entry to be looking for
Returns
the corresponding range of matching elements

Definition at line 557 of file EquivalenceRelation.h.

559  {
560  return end();
561  }
562  return antpostit(entry[0], entry[1]);
563  }
564 
565  return end();
566  }
567 
568  iterator lower_bound(const TupleType& entry) const {
569  operation_hints hints;
570  return lower_bound(entry, hints);
571  }
572 
573  /**
574  * This function is only here in order to unify interfaces in InterpreterIndex.
575  * Unlike the name suggestes, it omit the arguments and simply return the end
576  * iterator of the relation.
577  *
578  * @param omitted
579  * @return the end iterator.
580  */
581  iterator upper_bound(const TupleType&, operation_hints&) const {
582  return end();

◆ partition()

template<typename TupleType >
std::vector<souffle::range<iterator> > souffle::EquivalenceRelation< TupleType >::partition ( size_t  chunks) const
inline

Generate an approximate number of iterators for parallel iteration The iterators returned are not necessarily equal in size, but in practise are approximately similarly sized Depending on the structure of the data, there can be more or less partitions returned than requested.

Parameters
chunksthe number of requested partitions
Returns
a list of the iterators as ranges

Definition at line 672 of file EquivalenceRelation.h.

678  const size_t s = itp.second->size();
679  if (s * s > perchunk) {
680  for (const auto& i : *itp.second) {
681  ret.push_back(souffle::make_range(anteriorIt(i), end()));
682  }
683  } else {
684  ret.push_back(souffle::make_range(closure(itp.first), end()));
685  }
686  }
687 
688  return ret;
689  }
690 
691  iterator find(const TupleType&, operation_hints&) const {
692  throw std::runtime_error("error: find() is not compatible with equivalence relations");
693  return begin();
694  }
695 
696  iterator find(const TupleType& t) const {
697  operation_hints context;
698  return find(t, context);
699  }
700 
701 protected:
702  bool containsElement(value_type e) const {
703  return this->sds.nodeExists(e);
704  }
705 

◆ size()

template<typename TupleType >
size_t souffle::EquivalenceRelation< TupleType >::size ( ) const
inline

Size of relation.

Returns
the sum of the number of pairs per disjoint set

Definition at line 242 of file EquivalenceRelation.h.

245  {
246  public:
247  typedef std::forward_iterator_tag iterator_category;
248  using value_type = TupleType;
249  using difference_type = ptrdiff_t;
250  using pointer = value_type*;
251  using reference = value_type&;
252 
253  // one iterator for signalling the end (simplifies)
254  explicit iterator(const EquivalenceRelation* br, bool /* signalIsEndIterator */)
255  : br(br), isEndVal(true){};

Referenced by souffle::EquivalenceRelation< Arity >::closure(), and souffle::test::TEST().

◆ upper_bound() [1/2]

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::upper_bound ( const TupleType &  ,
operation_hints  
) const
inline

This function is only here in order to unify interfaces in InterpreterIndex.

Unlike the name suggestes, it omit the arguments and simply return the end iterator of the relation.

Parameters
omitted
Returns
the end iterator.

Definition at line 597 of file EquivalenceRelation.h.

603  {

Referenced by souffle::EquivalenceRelation< Arity >::lower_bound().

◆ upper_bound() [2/2]

template<typename TupleType >
iterator souffle::EquivalenceRelation< TupleType >::upper_bound ( const TupleType &  entry) const
inline

Definition at line 601 of file EquivalenceRelation.h.

603  {

Field Documentation

◆ equivalencePartition

template<typename TupleType >
StatesMap souffle::EquivalenceRelation< TupleType >::equivalencePartition
mutableprivate

◆ sds

template<typename TupleType >
souffle::SparseDisjointSet<value_type> souffle::EquivalenceRelation< TupleType >::sds
mutableprivate

◆ statesLock

template<typename TupleType >
std::shared_mutex souffle::EquivalenceRelation< TupleType >::statesLock
mutableprivate

◆ statesMapStale

template<typename TupleType >
std::atomic<bool> souffle::EquivalenceRelation< TupleType >::statesMapStale
mutableprivate

The documentation for this class was generated from the following file:
souffle::SparseDisjointSet::sameSet
bool sameSet(SparseDomain x, SparseDomain y)
Definition: UnionFind.h:319
souffle::EquivalenceRelation::statesLock
std::shared_mutex statesLock
Definition: EquivalenceRelation.h:728
ignore
std::set< const Atom * > ignore
Definition: Ground.cpp:169
souffle::EquivalenceRelation::StorePair
std::pair< value_type, StatesBucket > StorePair
Definition: EquivalenceRelation.h:65
souffle::EquivalenceRelation::find
iterator find(const TupleType &, operation_hints &) const
Definition: EquivalenceRelation.h:707
souffle::EquivalenceRelation::contains
bool contains(value_type x, value_type y) const
Returns whether there exists a pair with these two nodes.
Definition: EquivalenceRelation.h:199
souffle::EquivalenceRelation::statesMapStale
std::atomic< bool > statesMapStale
Definition: EquivalenceRelation.h:732
e
l j a showGridBackground &&c b raw series this eventEmitter e
Definition: htmlJsChartistMin.h:15
souffle::EquivalenceRelation::lower_bound
iterator lower_bound(const TupleType &entry, operation_hints &) const
Act similar to getBoundaries.
Definition: EquivalenceRelation.h:557
souffle::SparseDisjointSet::unionNodes
void unionNodes(SparseDomain x, SparseDomain y)
Definition: UnionFind.h:327
souffle::EquivalenceRelation::genAllDisjointSetLists
void genAllDisjointSetLists() const
Generate a cache of the sets such that they can be iterated over efficiently.
Definition: EquivalenceRelation.h:738
souffle::EquivalenceRelation::end
iterator end() const
iterator pointing to the end of the tuples
Definition: EquivalenceRelation.h:489
MAX_THREADS
#define MAX_THREADS
Definition: ParallelUtil.h:98
souffle::detail::LambdaBTree::insert
Functor::result_type insert(Key &k, const Functor &f)
Inserts the given key into this tree.
Definition: LambdaBTree.h:87
souffle::EquivalenceRelation::size
size_t size() const
Size of relation.
Definition: EquivalenceRelation.h:242
souffle::EquivalenceRelation::StatesList
souffle::PiggyList< value_type > StatesList
Definition: EquivalenceRelation.h:63
souffle::SparseDisjointSet::contains
bool contains(SparseDomain v1, SparseDomain v2)
Definition: UnionFind.h:355
souffle::EquivalenceRelation::anteriorIt
iterator anteriorIt(value_type anteriorVal) const
Creates an iterator that generates all pairs (A, X) for a given A, and X are elements within A's disj...
Definition: EquivalenceRelation.h:619
souffle::SparseDisjointSet::findNode
SparseDomain findNode(SparseDomain x)
Definition: UnionFind.h:323
i
size_t i
Definition: json11.h:663
souffle::make_range
range< Iter > make_range(const Iter &a, const Iter &b)
A utility function enabling the construction of ranges without explicitly specifying the iterator typ...
Definition: ContainerUtil.h:389
souffle::EquivalenceRelation::containsElement
bool containsElement(value_type e) const
Definition: EquivalenceRelation.h:718
souffle::detail::btree::size
size_type size() const
Definition: BTree.h:1321
souffle::MIN_RAM_SIGNED
constexpr RamSigned MIN_RAM_SIGNED
lower and upper boundaries for the ram types
Definition: RamTypes.h:96
souffle::EquivalenceRelation::insert
bool insert(value_type x, value_type y)
Insert the two values symbolically as a binary relation.
Definition: EquivalenceRelation.h:94
souffle::detail::btree::find
iterator find(const Key &k) const
Locates the given key within this tree and returns an iterator referencing its position.
Definition: BTree.h:1772
souffle::EquivalenceRelation::EquivalenceRelation
EquivalenceRelation()
Definition: EquivalenceRelation.h:72
souffle::EquivalenceRelation::upper_bound
iterator upper_bound(const TupleType &, operation_hints &) const
This function is only here in order to unify interfaces in InterpreterIndex.
Definition: EquivalenceRelation.h:597
souffle::SparseDisjointSet::nodeExists
bool nodeExists(const SparseDomain val) const
Definition: UnionFind.h:351
souffle::EquivalenceRelation::closure
iterator closure(value_type rep) const
Begin an iterator over all pairs within a single disjoint set - This is used for partition().
Definition: EquivalenceRelation.h:656
souffle::EquivalenceRelation::sds
souffle::SparseDisjointSet< value_type > sds
Definition: EquivalenceRelation.h:725
souffle::EquivalenceRelation::equivalencePartition
StatesMap equivalencePartition
Definition: EquivalenceRelation.h:730
souffle::EquivalenceRelation::value_type
typename TupleType::value_type value_type
Definition: EquivalenceRelation.h:59
souffle::EquivalenceRelation::begin
iterator begin() const
iterator pointing to the beginning of the tuples, with no restrictions
Definition: EquivalenceRelation.h:480
souffle::EquivalenceRelation::antpostit
iterator antpostit(value_type anteriorVal, value_type posteriorVal) const
Creates an iterator that generates the pair (A, B) for a given A and B.
Definition: EquivalenceRelation.h:638
p
a horizontalBars(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX,{highLow:d, referenceValue:0})):a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX,{highLow:d, referenceValue:0})), l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y, b.normalized.series, o,{ticks:k}):a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, a.axisY)) var p
Definition: htmlJsChartistMin.h:15