Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

Tuple.H

Go to the documentation of this file.
00001 /* _______              __
00002   / ___/ /  ___  __ _  / /  ___
00003  / /__/ _ \/ _ \/  ' \/ _ \/ _ \
00004  \___/_//_/\___/_/_/_/_.__/\___/ 
00005 */
00006 //
00007 // This software is copyright (C) by the Lawrence Berkeley
00008 // National Laboratory.  Permission is granted to reproduce
00009 // this software for non-commercial purposes provided that
00010 // this notice is left intact.
00011 // 
00012 // It is acknowledged that the U.S. Government has rights to
00013 // this software under Contract DE-AC03-765F00098 between
00014 // the U.S.  Department of Energy and the University of
00015 // California.
00016 //
00017 // This software is provided as a professional and academic
00018 // contribution for joint exchange. Thus it is experimental,
00019 // is provided ``as is'', with no warranties of any kind
00020 // whatsoever, no support, no promise of updates, or printed
00021 // documentation. By using this software, you acknowledge
00022 // that the Lawrence Berkeley National Laboratory and
00023 // Regents of the University of California shall have no
00024 // liability with respect to the infringement of other
00025 // copyrights by any part of this software.
00026 //
00027 
00028 #ifndef CH_TUPLE_H
00029 #define CH_TUPLE_H
00030 
00031 //
00032 // $Id: Tuple.H,v 1.3 2003/07/29 23:04:41 bvs Exp $
00033 //
00034 
00035 #include <cstdlib>
00036 using namespace std;
00037 
00038 #include <cassert>
00039 
00040 //
00042 
00050 template <class T, size_t N>
00051 class Tuple
00052 {
00053 public:
00054  
00060     Tuple ();
00061 
00068   //explicit Tuple (const T* v);
00069     //
00070     // The copy constructor.
00071     //
00072     Tuple (const Tuple& rhs);
00073     //
00074     // The copy assignment operator.
00075     //
00076     Tuple& operator= (const Tuple& rhs);
00077  
00082     T& operator[] (int i);
00083  
00088     const T& operator[] (int i) const;
00089  
00094     operator const T* () const;
00095 
00096 protected:
00097     //
00098     // The underlying vector of T representing the Tuple.
00099     //
00100     T vect[N];
00101 };
00102 
00103 //
00104 // Inlines.
00105 //
00106 
00107 template <class T, size_t N>
00108 inline
00109 Tuple<T,N>::Tuple()
00110 {}
00111 
00112 template <class T, size_t N>
00113 inline
00114 T&
00115 Tuple<T,N>::operator[] (int i)
00116 {
00117     assert(0 <= i && i < (int)N);
00118     return vect[i];
00119 }
00120 
00121 template <class T, size_t N>
00122 inline
00123 const T&
00124 Tuple<T,N>::operator[] (int i) const
00125 {
00126     assert(0 <= i && i < (int)N);
00127     return vect[i];
00128 }
00129 
00130 template <class T, size_t N>
00131 inline
00132 Tuple<T,N>::operator const T* () const
00133 {
00134     return &vect[0];
00135 }
00136 
00137 
00138 //template <class T, size_t N>
00139 //Tuple<T,N>::Tuple (const T* v)
00140 //{
00141 //    assert(v != 0);
00142 //    for (size_t i = 0; i < N; ++i)
00143 //        vect[i] = v[i];
00144 //}
00145 
00146 template <class T, size_t N>
00147 Tuple<T,N>::Tuple (const Tuple<T,N>& rhs)
00148 {
00149     for (size_t i = 0; i < N; ++i)
00150         vect[i] = rhs.vect[i];
00151 }
00152 
00153 template <class T, size_t N>
00154 Tuple<T,N>&
00155 Tuple<T,N>::operator= (const Tuple<T,N>& rhs)
00156 {
00157     for (size_t i = 0; i < N; ++i)
00158         vect[i] = rhs.vect[i];
00159     return *this;
00160 }
00161 
00162 #endif /*CH_TUPLE_H*/

Generated on Wed Jun 2 13:53:35 2004 for Chombo&INSwithParticles by doxygen 1.3.2