Shark Machine Learning Library
  • About Shark
  • Sourceforge
    • Project Summary
    • Downloads
    • Subversion Repository
  • Getting Started
  • Tutorials
  • FAQ
  • Main Modules
    • ReClaM
    • EALib
    • MOO-EALib
    • Fuzzy
  • Tools
    • Mixture
    • Array
    • Rng
    • LinAlg
    • FileUtil
  • Main Page
  • Modules
  • Classes

ArrayTable.h

Go to the documentation of this file.
00001 //===========================================================================
00045 //===========================================================================
00046 
00047 
00048 #ifndef __ARRAY_TABLE_H
00049 #define __ARRAY_TABLE_H
00050 
00051 #include "Array/Array.h"
00052 
00053 //===========================================================================
00084 template<class T>
00085 
00086 class ArrayTable
00087 {
00088 
00089 public:
00090 
00091 //===========================================================================
00109     Array<T> A;
00110 
00111 //===========================================================================
00130     Array<T*> P1;
00131 
00132 //===========================================================================
00150     Array<T**> P2;
00151 
00152 
00153 //===========================================================================
00181     void resize(unsigned d0, unsigned d1, unsigned d2, int dummy = 0)
00182     {
00183         unsigned i, j;
00184         A.resize(d0, d1, d2, false);
00185         P1.resize(d0, d1, false);
00186         P2.resize(d0, false);
00187         for (i = 0;i < d0;i++) {
00188             for (j = 0;j < d1;j++)  P1(i, j) = &A(i, j, 0);
00189             P2(i) = &P1(i, 0);
00190         }
00191     }
00192 
00193 //===========================================================================
00219     void resize(unsigned d0, unsigned d1, int dummy = 0)
00220     {
00221         unsigned i;
00222         A.resize(d0, d1, false);
00223         P1.resize(d0, false);
00224         P2.resize(0, false);
00225         for (i = 0;i < d0;i++) P1(i) = &A(i, 0);
00226     }
00227 
00228 //===========================================================================
00252     void resize(unsigned d0, int dummy = 0)
00253     {
00254         A.resize(d0, false);
00255         P1.resize(0, false);
00256         P2.resize(0, false);
00257     }
00258 
00259 
00260 //===========================================================================
00296     operator T*()
00297     {
00298         return A.elemvec();
00299     }
00300 
00301 
00302 //===========================================================================
00347     operator T**()
00348     {
00349         return P1.elemvec();
00350     }
00351 
00352 
00353 //===========================================================================
00403     operator T***()
00404     {
00405         return P2.elemvec();
00406     }
00407 
00408 
00409 //===========================================================================
00434     T& operator()(unsigned i)
00435     {
00436         return A(i);
00437     }
00438 
00439 
00440 //===========================================================================
00467     T& operator()(unsigned i,unsigned j)
00468     {
00469         return P1(i)[j];
00470     }
00471 
00472 
00473 //===========================================================================
00502     T& operator()(unsigned i,unsigned j, unsigned k)
00503     {
00504         return P2(i)[j][k];
00505     }
00506 
00507 
00508 //===========================================================================
00532     ArrayTable<T>& operator =(const ArrayTable<T>& a)
00533     {
00534         if (a.A.ndim() == 3) resize(a.A.dim(0), a.A.dim(1), a.A.dim(2), false);
00535         else {
00536             if (a.A.ndim() == 2) resize(a.A.dim(0), a.A.dim(1), false);
00537             else if (a.A.ndim() == 1) resize(a.A.dim(0), false);
00538         }
00539         A = a.A;
00540         return *this;
00541     }
00542 
00543 //===========================================================================
00565     ArrayTable<T>& operator =(const T& d)
00566     {
00567         for (unsigned i = 0;i < A.nelem();i++) A.elem(i) = d;
00568         return *this;
00569     }
00570 
00571 
00572 
00573 //===========================================================================
00590     ArrayTable()
00591 { }
00592 
00593 //===========================================================================
00611     ArrayTable(unsigned i)
00612     {
00613         resize(i);
00614     }
00615 
00616 
00617 //===========================================================================
00636     ArrayTable(unsigned i, unsigned j)
00637     {
00638         resize(i, j);
00639     }
00640 
00641 
00642 //===========================================================================
00662     ArrayTable(unsigned i, unsigned j, unsigned k)
00663     {
00664         resize(i, j, k);
00665     }
00666 
00667 //===========================================================================
00683     ArrayTable(const ArrayTable<T>& a)
00684     {
00685         operator = (a);
00686     }
00687 
00688 
00689 };
00690 
00691 
00692 #endif // __ARRAY_TABLE_H
00693