Skip to content

freetdi/gala

Repository files navigation

Gala is a C++ graph implementation inspired by boost/BGL, but with low level
access. you choose the containers and data types and get full access -- at
your own risk.

Some parts of the code and some decisions are under construction. The example
graphs, used as boost graphs, are meant to be safe.

The treedec graph interface is following treedec and might be subject to future
changes.

A gala graph has 4 template args, two of which are container types. The third
is the (internal) vertex representation, the fourth is a configuration.

CONTAINER TYPES

.. are STL style containers, but with one argument only. If you
want to use custom allocators, you will have to wrap the type such as in

  template<class T>
  using some_container_type=std::vector<T, my_own_allocator>;

and then pass some_container_type to gala::graph.

INTERNAL VERTEX REPRESENTATION

Is an unsigned integer type, or gala::vertex_ptr_tag (default). The latter
meaning that only pointers (to the edgesets) are used internally. saving one
indirection.

CONFIGURATION

A gala::graph configuration is a struct that defines the graph behaviour. It
holds variables of type static constexpr bool, such as

  force_simple    the graph does not allow multiple edges
                  (currently, this is on by default)

  force_multigraph the graph does allow multiple edges
                   (not implemented for sets)

  force_ordering  outedges are stored so iteration will be ascending
                  (default off)

  is_directed     edges are tuples, not sets.

  force_symmetric (directed graphs only), (a,b) and (b,a) have the same
                  multiplicity (incomplete)

  is_loopless     not yet...

  force_antisymm  not yet... only for directed. if theres an edge (a,b), then
                  there is no edge (b,a)

These may affect the complexity of add_edge, copy and move (assignment)
operations, depending on the chosen containers.

TESTS

$ make check

will compile and run some tests. dependencys only work locally. Test status
is the return code. Anything printed is for orientation only.

PYTHON PACKAGE

See python subdirectory for supplementary material