1. 16 Mar, 2017 1 commit
  2. 15 Dec, 2016 2 commits
  3. 25 Nov, 2016 1 commit
  4. 24 Nov, 2016 1 commit
  5. 08 Nov, 2016 1 commit
  6. 18 Oct, 2016 2 commits
  7. 12 Oct, 2016 2 commits
  8. 24 Sep, 2016 1 commit
  9. 25 Aug, 2016 1 commit
  10. 16 Aug, 2016 1 commit
  11. 09 Aug, 2016 2 commits
  12. 13 Jul, 2016 1 commit
    • Steffen Müthing's avatar
      Merge branch 'feature/no-variable-templates' into 'master' · 8f04a97e
      Steffen Müthing authored
      Feature/no variable templates
      
      Due to the introduction of the variable template `staticDegree<N>` the master of `dune-typetree` does no longer compile with gcc-4.9 and hence you cannot use `dune-typetree` and thus `dune-functions` on debian stable. This merge request removed this variable template and uses `StaticDegree<N>::value` instead. As far as I can see the latter does not have any disadvantage despite being slightly more verbose. However, in this case the difference is rather small, such that using this new feature does hardy give any benefit but excludes many users.
      
      With this merge request the modules `dune-typetree` and `dune-functions` and their tests compile and run successfully with gcc-4.9.
      
      
      See merge request !13
      8f04a97e
  13. 04 Jul, 2016 2 commits
    • Carsten Gräser's avatar
      Remove staticDegree<N> · a2179d6c
      Carsten Gräser authored
      By removing this variable template the code compiles
      with gcc-4.9 and thus (hopefully) with debian stable
      again. Notice that, despite beeing slightly more verbose,
      this has no disadvantage.
      a2179d6c
    • Carsten Gräser's avatar
      Avoid using variable template · d196c372
      Carsten Gräser authored
      Use StaticDegree<N>::value instead of staticDegree<N>.
      d196c372
  14. 15 Jun, 2016 1 commit
  15. 05 Jun, 2016 2 commits
  16. 19 May, 2016 9 commits
    • Steffen Müthing's avatar
      [bugfix] fix compiler warning · 568df5e2
      Steffen Müthing authored
      568df5e2
    • Steffen Müthing's avatar
      9c0fa934
    • Steffen Müthing's avatar
      Merge branch 'feature/reimplement-child-storage-extraction' into 'master' · 885b906e
      Steffen Müthing authored
      Reimplement child storage extraction
      
      During the re-write of the child extraction code, we lost the ability to extract the storage of a child. This merge requests adds that functionality again.
      
      See merge request !11
      885b906e
    • Steffen Müthing's avatar
      [child extraction] add childStorage() function to directly access the storage of a child · b37d0431
      Steffen Müthing authored
      In some contexts, we actually have to access the underlying storage of a
      node's children (e.g. for proxy nodes). It is important to *not* use
      `child()` in this situation, as the child might have been allocated on
      the head (e.g. as part of a tree transformation) and thus might
      disappear when its parent goes out of scope or is otherwise destroyed.
      
      This patch adds a new function `childStorage()` that works just like
      `child()`, but returns the storage (usually a `std::shared_ptr`) of the
      child instead. It will fail if the child path is of length zero and the
      passed-in object is not pointer-like. If it is pointer-like, the
      algorithm assumes that the pointer represents the storage of the root
      node and will just return that object.
      b37d0431
    • Steffen Müthing's avatar
      Merge branch 'feature/freestanding-degree-and-tag-functions' into 'master' · 7cf76948
      Steffen Müthing authored
      Add freestanding degree and tag functions
      
      This merge requests does two things:
      
      * Freestanding meta functions for accessing the `NodeTag` and
        `ImplementationTag`, which are called just like the tag that they
        extract. Just replace `typename Node::NodeTag` with `NodeTag<Node>`.
        This gets rid of a `typename` and improves readability as well as
        extensibility. The merge requests also switches all internal uses of
        those tags to the new meta functions.
      
      * More importantly, it gets rid of the horrible node member `CHILDREN`.
        This is actually a leftover from TypeTree's predecessor. The new
        canonical way of accessing the degree of a node is either:
      
        * If you have a node instance lying around and only need the run time
          information, you can simply write `TypeTree::degree(node)`. At the
          moment, the degree of all nodes is fixed at compile time, but this
          might change in the future.
      
        * If you need compile time information, you can use the new variable
          template `TypeTree::staticDegree<Node>`. This expression directly
          evaluates to the actual number. If you are instead interested in a
          type, you can use `TypeTree::StaticDegree<Node>` to obtain a
          `std::integral_constant<std::size_t,...>`.
      
        Internally, the default implementation forwards to a static member
        function `Node::degree()`, but this can be changed by overloading the
        dispatch mechanism on the node tag.
      
      * All internal uses of `Node::CHILDREN` have been replaced by calls to
        the new (meta) function.
      
      * `Node::CHILDREN` is **deprecated** and will be removed after the
        release of TypeTree 3.0.
      
      See merge request !10
      7cf76948
    • Steffen Müthing's avatar
    • Steffen Müthing's avatar
    • Steffen Müthing's avatar
      [Interface] Add freestanding functions for node degree · 2a1f33b9
      Steffen Müthing authored
      This patch introduces two new functions to obtain the degree of a tree
      node:
      
      degree(node) is a normal, freestanding function that will in theory even
      work for nodes where the number of children is determined at run time.
      
      StaticDegree<Node> and staticDegree<Node> obtain the degree as a compile
      time constant and are thus only usable for nodes where the degree is
      fixed at compile time. staticDegree<Node> is a variable template and
      thus creates a hard dependency on C++14.
      
      Internally, both functions dispatch to the following function signature:
      
      template<typename Node, typename NodeTag>
      constexpr std::size_t degree(const Node* node, NodeTag nodeTag);
      
      Note that this signature uses a pointer to the node; this is necessary
      to make it usable in the constexpr context, where the node parameter has
      to be constexpr - manufacturing a constexpr reference is not possible in
      general.
      
      The default implementation of this function calls the static member
      function Node::degree(). If your node implementation requires different
      behavior, you can provide an overload for your custom node tag that will
      be found via ADL. staticDegree<Node> will only work if this function is
      constexpr (it is thus important to make Node::degree() constexpr in your
      implementation iff the degree is a compile time constant).
      2a1f33b9
    • Steffen Müthing's avatar
      [Interface] Add freestanding type aliases for node tags · b185f2f0
      Steffen Müthing authored
      This patch adds freestanding template aliases NodeTag<Node> and
      ImplementationTag<Node>. This improves readability and allows a future
      extension to nodes that do not carry the nested tag types (by
      introducing an intermediate dispatch mechanism). But for now, it's just
      about readability...
      b185f2f0
  17. 01 Apr, 2016 5 commits
  18. 21 Mar, 2016 2 commits
  19. 21 Feb, 2016 1 commit
  20. 21 Jan, 2016 2 commits
    • Steffen Müthing's avatar
      Merge branch 'feature/#2-testtypetree-child-access' into 'master' · 880154eb
      Steffen Müthing authored
      testtypetree: Test (in)valid child() access
      
      This is an addendum to @carsten.graeser's merge request !5: I originally
      added a comment; now I've turned it into a proper test.
      
      Please note that even though this merge request can be merged as-is, one
      of the four new tests will only pass once !5 is merged.
      
      See merge request !6
      880154eb
    • Steffen Müthing's avatar
      Merge branch 'carsten.graeser/dune-typetree-feature/drop-lazy-decltype' · 1230fc40
      Steffen Müthing authored
      This switches the detection of a templated child() method to a
      concept. It's a lot nicer than my abomination...
      
      This is a partial fix for #2 (only works for master because it requires
      the concept support in dune-common).
      
      References !5.
      
      * carsten.graeser/dune-typetree-feature/drop-lazy-decltype:
        [cleanup] Drop _lazy_static_decltype in favour of return type deduction
        Add dummy overload to generate nice compiler errors
        Use concepts to check for the child<0>() method
      1230fc40