Skip to content

TypeTree Library for trees of statically typed objects

License

Notifications You must be signed in to change notification settings

andreasbuhr/dune-typetree

 
 

Repository files navigation

TypeTree
========

TypeTree is a template library for constructing and operating on statically
typed trees of objects. It is based around the idea of defining loosely coupled,
componentized algorithms. Component lookup happens through tag dispatch, making
it very easy to extend and / or modify existing algorithms as well as constructing
new algorithms for existing types of tree nodes.

The provided algorithms include visitor-based iteration of both single trees and
pairs of trees and a powerful tree transformation algorithm that automatically
decomposes an existing tree and constructs the transformed one, only requiring
the user to specify the per-node transformation policies.

Moreover, there are some more specialized utility algorithms for compile-time
reductions over trees and leaves, which are mainly useful for the construction
of template meta programs.

Finally, there are mixin implementations of the three default node concepts in
the library (leaf nodes, power nodes and composite nodes). For more complicated
use patterns, the library also contains generic implementations of proxy nodes
and, on top of that functionality, filtered nodes that can reorder and / or
restrict access to some of their children.

The TypeTree library was originally developed as part of PDELab[0] to support its
tree-based abstraction of function spaces, but has attracted wider-spread interest.
To facility integration with other projects, we have extracted the code from
PDELab into this standalone library

This package contains the TypeTree library code. For usage examples your best bet
is to look at the PDELab package.

If you have downloaded a release tarball, you can find the autogenerated Doxygen
API documentation in doc/doxygen/html. Otherwise, you can build this documentation
yourself by calling "make doc". Note that you need Doxygen and GraphViz available at
configure time to be able to build the documentation.

If you need help, please ask on the PDELab mailinglist for now [5]. Bugs can also be
submitted to the PDELab bugtracker at [6] instead.

Dependencies
------------

TypeTree depends on the following software packages:

* The dune-common library from DUNE, version 2.3.x. The dependency is actually very
  weak, and you can easily use the library standalone by replacing the few convenience
  components reused from dune-common (and by replacing the build system, of course).

* TypeTree uses lots and lots of templates, so you need a decent C++ compiler. This
  initial release should still compile with GCC 4.2, but we plan to bump up the
  requirements to the level of C++11 support provided by GCC 4.4 or 4.5 (not decided
  yet). Even now, compile times are greatly reduced if the compiler supports the new
  C++11 standard (GCC 4.3 and newer). PDELab is not regularly tested with ICC (it should
  work with ICC 13.x), but we also support the clang compiler (3.1+).

For a full explanation of the DUNE installation process please read
the installation notes [2] or the build system HOWTO [3].

License
-------

The PDELab library, headers and test programs are free open-source software,
dual-licensed under version 3 or later of the GNU Lesser General Public License
and version 2 of the GNU General Public License with a special run-time exception.

See the file COPYING for full copying permissions.

Installation
------------

Short installation instructions can be found in file INSTALL. For the
full instructions please see [1].

Links
-----

0. http://www.dune-project.org/pdelab/
1. http://www.dune-project.org
2. http://www.dune-project.org/doc/installation-notes.html
3. http://dune-project.org/doc/buildsystem/buildsystem.pdf
4. http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.license
5. http://lists.dune-project.org/mailman/listinfo/dune-pdelab
6. http://users.dune-project.org/projects/dune-pdelab/issues

About

TypeTree Library for trees of statically typed objects

Resources

License

Stars

Watchers

Forks

Packages

No packages published