RDBColumnTmplt.h

00001 #ifndef RDBColumnTmplt_h
00002 #define RDBColumnTmplt_h
00003 
00004 /* --8<--8<--8<--8<--
00005  *
00006  * Copyright (C) 2006 Smithsonian Astrophysical Observatory
00007  *
00008  * This file is part of RDB
00009  *
00010  * RDB is free software; you can redistribute it and/or
00011  * modify it under the terms of the GNU General Public License
00012  * as published by the Free Software Foundation; either version 2
00013  * of the License, or (at your option) any later version.
00014  *
00015  * RDB is distributed in the hope that it will be useful,
00016  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018  * GNU General Public License for more details.
00019  *
00020  * You should have received a copy of the GNU General Public License
00021  * along with this program; if not, write to the 
00022  *       Free Software Foundation, Inc. 
00023  *       51 Franklin Street, Fifth Floor
00024  *       Boston, MA  02110-1301, USA
00025  *
00026  * -->8-->8-->8-->8-- */
00027 
00028 #include <sstream>
00029 #include <string>
00030 #include <utility>
00031 
00032 #include <rdbxx/RDBColumn.h>
00033 
00034 using namespace std;
00035 
00037 template <class Tmplt0, class Tmplt1, class Tmplt2>
00038 class RDBColumnTmplt : public RDBColumn {
00039  public:
00041 
00042 
00043   RDBColumnTmplt( const string& name="", const string& def="" ) throw ( RDBErr );
00045   RDBColumnTmplt( const RDBColumnTmplt<Tmplt0,Tmplt1,Tmplt2>& rdbcolumntmplt );
00047   ~RDBColumnTmplt( void );
00048 
00050   RDBColumn& operator=( const RDBColumnTmplt<Tmplt0,Tmplt1,Tmplt2>& rdbcolumntmplt );
00052   virtual RDBColumn& operator=( const Tmplt0& data ) throw ( RDBErr );
00054   virtual RDBColumn& operator=( const Tmplt1& data ) throw ( RDBErr );
00056   virtual RDBColumn& operator=( const Tmplt2& data ) throw ( RDBErr );
00058 
00060 
00061 
00062   virtual void advanceIdx( void );
00064   virtual void rewind( void );
00066 
00068 
00069   virtual void setGroup( bool group );
00071   virtual void setGroupValue( void );
00073   virtual int newGroup( void );
00075   
00077 
00078 
00079   virtual bool setData( const Tmplt0& data ) throw ( RDBErr );
00081   virtual bool setData( const Tmplt1& data ) throw ( RDBErr );
00083   virtual bool setData( const Tmplt2& data ) throw ( RDBErr );
00085 
00087 
00088 
00089   virtual void mapData( Tmplt0 data[], const size_t nelems ) throw ( RDBErr );
00091 
00092   
00094 
00095 
00096   void* getData( void );
00098   virtual bool getData( Tmplt0& data ) throw( RDBErr );
00100   virtual bool getData( Tmplt1& data ) throw( RDBErr );
00102   virtual bool getData( Tmplt2& data ) throw( RDBErr );
00104   virtual double getDataDouble( void ) throw ( RDBErr );
00106   virtual long getDataLong( void ) throw ( RDBErr );
00108   virtual string getDataString( void ) throw ( RDBErr );
00110 
00111  protected:
00113   virtual istream& read( istream& is ) throw ( RDBErr );
00115   virtual ostream& write( ostream& os ) const;
00117   void cleanup( void );
00118 
00120   Tmplt0* _data;
00122   size_t _idx;
00124   size_t _nelems;
00126   bool _mine;
00127 
00129   Tmplt0 _groupvalue;
00130   
00131 };
00132 
00133 #ifndef RDBColumnTmplt_cc
00134 #include <rdbxx/RDBColumnTmplt.cc>
00135 #endif
00136 
00137 // template class RDBColumnTmplt<double,long,string>;
00138 // template class RDBColumnTmplt<long,string,double>;
00139 // template class RDBColumnTmplt<string,double,long>;
00140 
00142 typedef RDBColumnTmplt<double,long,string> RDBDoubleColumn;
00144 typedef RDBColumnTmplt<long,string,double> RDBLongColumn;
00146 typedef RDBColumnTmplt<string,double,long> RDBStringColumn;
00147 
00148 #endif

Generated on Tue Sep 15 11:07:16 2009 for rdbxx by  doxygen 1.5.6