Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals

Darray.h

Go to the documentation of this file.
00001 // Darray.h
00002 //////////////////////////////////////////////////////////////////////
00003 //          (c) Copyright 2000-2002 Brown Deer Technology, LLC.     
00004 //                        All rights reserved.                    
00005 //////////////////////////////////////////////////////////////////////
00006 
00007 #ifndef DARRAY_H
00008 #define DARRAY_H
00009 
00010 // class template Darray< Logic_t >
00011 
00012 template<class Logic_t>
00013 class Darray {
00014    public:
00015       typedef Logic_t DataType;
00016       Darray( const int Size );
00017       Darray( const Darray& rhs );
00018       ~Darray();
00019       Darray& operator=( const Darray& rhs );
00020       Logic_t& operator[](const int i) { return _data[i]; }
00021       int Size() { return _Size; }
00022    private:
00023       int _Size;
00024       Logic_t* _data;
00025 };
00026 
00027 template<class Logic_t>
00028 inline Darray<Logic_t>::Darray( const int Size ) 
00029 { 
00030    _Size = Size; 
00031    _data = new Logic_t[ _Size ]; 
00032 }
00033 
00034 template<class Logic_t>
00035 inline Darray<Logic_t>::Darray(const Darray& rhs ) 
00036   : _Size( rhs._Size ) 
00037 {
00038    _data = new Logic_t[ _Size ];
00039    for( int i = 0; i < _Size; i++ ) _data[i] = rhs._data[i];
00040 }
00041 
00042 template<class Logic_t>
00043 inline Darray<Logic_t>::~Darray() 
00044 { 
00045    if ( _data != 0 ) { delete [] _data; _data = 0; } 
00046 }
00047 
00048 template<class Logic_t>
00049 inline Darray<Logic_t>& Darray<Logic_t>::operator=( const Darray& rhs ) {
00050    if ( this != &rhs ) {
00051       _Size = rhs._Size;
00052       for( int i = 0; i <= rhs._Size; i++ ) _data[i] = rhs._data[i];
00053    }
00054    return *this;
00055 }
00056 
00057 template<class Logic_t>
00058 typename Darray<Logic_t>::DataType All( Darray<Logic_t>& a ) {
00059    typename Darray<Logic_t>::DataType tmp;
00060    tmp = 1;
00061    for( int i = 0; i< a.Size(); i++ ) tmp &= a[i];
00062    return tmp;
00063 };
00064 
00065 template<class Logic_t>
00066 typename Darray<Logic_t>::DataType Any( Darray<Logic_t>& a ) {
00067    typename Darray<Logic_t>::DataType tmp;
00068    tmp = 0;
00069    for( int i=0; i < a.Size(); i++ ) tmp |= a[i];
00070    return tmp;
00071 };
00072 
00073 template<class Logic_t>
00074 typename Darray<Logic_t>::DataType 
00075   MAll( const bool* mask, Darray<Logic_t>& a ) {
00076    typename Darray<Logic_t>::DataType tmp;
00077    tmp = 1;
00078    for( int i = 0; i < a.Size(); i++) if (mask[i]) tmp &= a[i];
00079    return tmp;
00080 };
00081 
00082 template<class Logic_t>
00083 typename Darray<Logic_t>::DataType 
00084   MAny( const bool& mask, Darray<Logic_t>& a ) {
00085    typename Darray<Logic_t>::DataType tmp;
00086    tmp = 0;
00087    for( int i = 0; i < a.Size(); i++ ) if ( mask[i] ) tmp |= a[i];
00088    return tmp;
00089 };
00090 
00091 // function templates
00092 
00093 template<class Logic_t>
00094 Darray<Logic_t> Not(Darray<Logic_t>& a ) {
00095    Darray<Logic_t> tmp( a.Size() );
00096    for( int i = 0; i < a.Size(); i++) tmp[i] = ~a[i] ;
00097    return tmp;
00098 };
00099 
00100 template<class Logic_t>
00101 Darray<Logic_t> And( Darray<Logic_t>& a, Darray<Logic_t>& b ) {
00102    Darray<Logic_t> tmp( a.Size() );
00103    for( int i = 0; i < a.Size(); i++ ) tmp[i] = a[i] & b[i] ;
00104    return tmp;
00105 };
00106 
00107 template<class Logic_t>
00108 Darray<Logic_t> Or( Darray<Logic_t>& a, Darray<Logic_t>& b ) {
00109    Darray<Logic_t> tmp( a.Size() );
00110    if ( a.Size() == b.Size() ) {
00111    for( int i = 0; i < a.Size(); i++ ) tmp[i] = a[i] | b[i] ;
00112    } else {
00113       for( int i = 0; i < a.Size(); i++ ) tmp[i] = 0;
00114    }
00115    return tmp;
00116 };
00117 
00118 template<class Logic_t>
00119 Darray<Logic_t> Xor(Darray<Logic_t>& a, Darray<Logic_t>& b ) {
00120    Darray<Logic_t> tmp(a.Size());
00121    if ( a.Size() == b.Size() ) {
00122    for( int i = 0; i < a.Size(); i++ ) tmp[i] = a[i] ^ b[i] ;
00123    } else {
00124       for( int i = 0; i < a.Size(); i++ ) tmp[i] = 0;
00125    }
00126    return tmp;
00127 };
00128 
00129 template<class Logic_t>
00130 Darray<Logic_t> operator~( Darray<Logic_t>& a ) { return Not(a); };
00131 
00132 template<class Logic_t>
00133 Darray<Logic_t> 
00134   operator&( Darray<Logic_t>& a, Darray<Logic_t>& b ) { 
00135    return And(a,b);
00136 };
00137 
00138 template<class Logic_t>
00139 Darray<Logic_t> 
00140   operator|( Darray<Logic_t>& a, Darray<Logic_t>& b ) {
00141    return Or(a,b);
00142 };
00143 
00144 template<class Logic_t>
00145 Darray<Logic_t> 
00146   operator^( Darray<Logic_t>& a, Darray<Logic_t>& b ) {
00147    return Xor(a,b);
00148 };
00149 
00150 #endif

Generated on Mon May 31 21:38:43 2004 for SR2k4 Assembler by doxygen 1.3.6