BIE |
/home/weinberg/src/BIE/include/clivector_manip.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef CLIVECTOR_MANIP_H 00004 #define CLIVECTOR_MANIP_H 00005 00006 #include <typeinfo> 00007 #include <clivector.h> 00008 00009 using namespace std; 00010 00011 namespace BIE { 00012 00026 //+ CLICLASS vmanip 00027 class vmanip : public Serializable 00028 { 00029 private: 00030 /* Pointers to all possible clivector types; 00031 this is a poor way of getting around the 00032 lack of a base class */ 00033 vector<double>* D; 00034 vector<int>* I; 00035 vector<string>* S; 00036 vector<Tessellation*>* T; 00037 00038 string id; // Type name for error output 00039 00040 // Template to check for a valid index value 00041 template <class T> 00042 bool chk(const vector<T>* t, int n) 00043 { 00044 if (n<0 || n>=static_cast<int>(t->size())) { 00045 cerr << typeid(*t).name() 00046 << " index=" << n << " out of bounds [0, " 00047 << t->size()-1 << "]" << endl; 00048 return false; 00049 } 00050 return true; 00051 } 00052 // Template to set vector element values 00053 template <class T> 00054 void sv(vector<T>* t, T& v, int n) 00055 { 00056 if (chk(t, n)) (*t)[n] = v; 00057 } 00058 // Template to print a single element value 00059 template <class T> 00060 void pv(const vector<T>* t, int n) 00061 { 00062 if (chk(t, n)) cout << (*t)[n] << endl; 00063 } 00064 // Template to print all elements values 00065 template <class T> 00066 void pa(const vector<T>* t) { 00067 if (t->size()) { 00068 for (unsigned i=0; i<t->size(); i++) 00069 cout << "v[" << i << "]=" << (*t)[i] << endl; 00070 } else { 00071 cout << "empty" << endl; 00072 } 00073 } 00074 00075 void wrong_type(string tp) { 00076 cerr << "This vector is " << id << "-valued, not a " << tp << endl; 00077 } 00078 00079 public: 00080 //+ CLICONSTR 00082 vmanip() { D=0; I=0; S=0; T=0; } 00083 00084 //+ CLICONSTR clivectord* 00086 vmanip(clivectord* v) { D=v; I=0; S=0; T=0; id="double"; } 00087 00088 //+ CLICONSTR clivectori* 00090 vmanip(clivectori* v) { D=0; I=v; S=0; T=0; id="int"; } 00091 00092 //+ CLICONSTR clivectors* 00094 vmanip(clivectors* v) { D=0; I=0; S=v; T=0; id="string"; } 00095 00096 //+ CLICONSTR clivectortess* 00098 vmanip(clivectortess* v) { D=0; I=0; S=0; T=v; id="Tessellation*"; } 00099 00100 //+ CLIMETHOD void setval int double 00102 void setval(int n, double v) { 00103 if (D) sv<double>(D, v, n); 00104 else wrong_type("double"); 00105 } 00106 00107 //+ CLIMETHOD void setval int int 00109 void setval(int n, int v) { 00110 if (I) sv<int>(I, v, n); 00111 else wrong_type("int"); 00112 } 00113 00114 //+ CLIMETHOD void setval int string 00116 void setval(int n, string v) { 00117 if (S) sv<string>(S, v, n); 00118 else wrong_type("string"); 00119 } 00120 00121 //+ CLIMETHOD void setval int Tessellation* 00123 void setval(int n, Tessellation* v) { 00124 if (T) sv<Tessellation*>(T, v, n); 00125 else wrong_type("Tessellation*"); 00126 } 00127 00128 //+ CLIMETHOD void showval int 00130 void showval(int n) 00131 { 00132 if (D) pv<double> (D, n); 00133 if (I) pv<int> (I, n); 00134 if (S) pv<string> (S, n); 00135 if (T) pv<Tessellation*>(T, n); 00136 } 00137 00138 //+ CLIMETHOD void showall 00140 void showall() 00141 { 00142 if (D) pa<double> (D); 00143 if (I) pa<int> (I); 00144 if (S) pa<string> (S); 00145 if (T) pa<Tessellation*>(T); 00146 } 00147 00148 private: 00149 00150 friend class boost::serialization::access; 00151 00152 template<class Archive> 00153 void serialize(Archive & ar, const unsigned int version) 00154 { 00155 try { 00156 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00157 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00158 } 00159 try { 00160 ar & BOOST_SERIALIZATION_NVP(id); 00161 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00162 } 00163 try { 00164 ar & BOOST_SERIALIZATION_NVP(D); 00165 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00166 } 00167 try { 00168 ar & BOOST_SERIALIZATION_NVP(I); 00169 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00170 } 00171 try { 00172 ar & BOOST_SERIALIZATION_NVP(S); 00173 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00174 } 00175 try { 00176 ar & BOOST_SERIALIZATION_NVP(T); 00177 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00178 } 00179 } 00180 00181 }; 00182 00183 } // END namespace BIE 00184 00185 BIE_CLASS_TYPE_INFO(BIE::vmanip) 00186 00187 #endif Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:10 2010 by
|