include/topology/cycles.h
author Dmitriy Morozov <dmitriy@mrzv.org>
Tue, 23 Dec 2008 11:02:08 -0800
branchdev
changeset 98 d81e460e267a
parent 97 0a9bd3f34419
child 107 a5debdc35559
permissions -rw-r--r--
Closed #8a1 and #96b, added #de6 and #f64

#ifndef __CYCLES_H__
#define __CYCLES_H__

#include "chain.h"
#include <vector>
#include "utilities/circular_list.h"

template<class OrderIndex_ = int>
struct VectorChains
{
    typedef             OrderIndex_                                             OrderIndex;
    typedef             ChainWrapper<std::vector<OrderIndex> >                  Chain;
    typedef             Chain                                                   Cycle;

    Cycle               cycle;

                        VectorChains()                                          {}
                        VectorChains(Cycle z): cycle(z)                         {}

    bool                sign() const                                            { return cycle.empty(); }

    template<class U> struct rebind
    { typedef           VectorChains<U>         other; };
};

template<class OrderIndex_ = int>
struct ListChains
{
    typedef             OrderIndex_                                             OrderIndex;
    typedef             ChainWrapper<List<OrderIndex> >                         Chain;
    typedef             Chain                                                   Cycle;

    Cycle               cycle;

                        ListChains()                                            {}
                        ListChains(Cycle z): cycle(z)                           {}
    
    bool                sign() const                                            { return cycle.empty(); }
    
    template<class U> struct rebind
    { typedef           ListChains<U>           other; };
};

#endif // __CYCLES_H__