inlib  1.2.0
Public Member Functions
inlib::kronecker< T > Class Template Reference

common array ///////////////////////////////////////////////////////////// More...

Inheritance diagram for inlib::kronecker< T >:
Inheritance graph
[legend]
Collaboration diagram for inlib::kronecker< T >:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 kronecker (unsigned int a_order)

Detailed Description

template<class T>
class inlib::kronecker< T >

common array /////////////////////////////////////////////////////////////

Definition at line 520 of file array.


Constructor & Destructor Documentation

template<class T>
inlib::kronecker< T >::kronecker ( unsigned int  a_order) [inline]

Definition at line 522 of file array.

                                 :array<T>(a_order,a_order){
    //  epsilon(i1,i2,....in) with n = a_order and i in [0,n[.
    // Then an Array of a_order * a_order.
    unsigned int index = 0;
    typedef typename std::vector<unsigned int> uints_t;
    uints_t is(a_order);
    std::vector<T>& vec = array<T>::vector();
    typedef typename std::vector<T>::iterator vec_it_t;
    vec_it_t it = vec.begin();
    for(;it!=vec.end();++it,index++) {
      if(!array<T>::indices(index,is)) return; //FIXME throw.
      bool good = true;
     {for(unsigned iaxis=0;iaxis<a_order;iaxis++) {
        unsigned int ival = is[iaxis];
        for(unsigned iaxis2=iaxis+1;iaxis2<a_order;iaxis2++) {
          if(is[iaxis2]==ival) {
            good = false;
            break;
          }
        }
        if(!good) break;
      }}
      if(!good) continue;
      // All indicies are different.
      unsigned int n = 0;
      for(unsigned iaxis=0;iaxis<a_order;) { 
        unsigned int ival = is[iaxis];
        if(ival!=iaxis) {
          // Swap and add one permutation :
          unsigned int old = is[ival];
          is[ival] = ival;
          is[iaxis] = old;
          n +=1;
        } else {
          iaxis++;
        }
      }
     {unsigned int n_2 = n/2;
      if(2*n_2==n) (*it) = array<T>::one();
      else (*it) = array<T>::minus_one();}
    }
  }

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines