00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef JDXARRAYS_H
00019 #define JDXARRAYS_H
00020
00021 #include <tjutils/tjarray.h>
00022 #include <odinpara/jdxbase.h>
00023 #include <odinpara/jdxnumbers.h>
00024 #include <odinpara/jdxtypes.h>
00025
00026
00027 #define COMPRESSION_THRESHOLD_SIZE 256
00028
00029
00041 template<class A,class J>
00042 class JDXarray : public A, public virtual JcampDxClass {
00043
00044 public:
00045
00049 JDXarray () : A() {common_init();}
00050
00062 JDXarray (const A& a,const STD_string& name="",bool userParameter=true,
00063 compatMode mode=notBroken,parameterMode parameter_mode=edit,
00064 const STD_string& parx_equivalent="",
00065 float parx_assign_factor=1.0,float parx_assign_offset=0.0);
00066
00070
00071
00075 JDXarray (const JDXarray<A,J>& ja) {common_init(); JDXarray<A,J>::operator = (ja);}
00076
00080 JDXarray<A,J>& operator = (const A& a);
00081
00085 JDXarray<A,J>& operator = (const J& jv) {A::operator = (jv); return *this;}
00086
00090 JDXarray<A,J>& operator = (const JDXarray<A,J>& ja);
00091
00092
00093
00094 STD_ostream& print2stream(STD_ostream& os) const;
00095 STD_string printvalstring() const;
00096 bool parsevalstring (const STD_string& parstring);
00097 STD_string get_parx_code(parxCodeType type, const ParxEquiv& equiv) const;
00098 ParxEquiv get_parx_equiv() const {return parx_equiv;}
00099 GuiProps get_gui_props() const {return guiprops;}
00100 JcampDxClass& set_gui_props(const GuiProps& gp) {guiprops=gp; return *this;}
00101 const char* get_typeInfo() const;
00102 JcampDxClass* create_copy() const {return new JDXarray<A,J>(*this);}
00103 A* cast(A*) {return this;}
00104
00105
00106
00107 friend STD_ostream& operator << (STD_ostream& s,const JDXarray<A,J>& ja) { return ja.print2stream(s);}
00108 int write(const STD_string& filename) const {return JcampDxClass::write(filename);}
00109 int load(const STD_string &filename) {return JcampDxClass::load(filename);}
00110
00111
00112 private:
00113 void common_init();
00114 STD_string get_dim_str() const;
00115
00116 bool encode(STD_string* ostring, STD_ostream* ostream) const;
00117
00118 bool use_compression() const {return (get_filemode()==compressed)&&(A::total()>COMPRESSION_THRESHOLD_SIZE);}
00119
00120 ParxEquiv parx_equiv;
00121
00122 GuiProps guiprops;
00123
00124 mutable STD_string typeInfo_cache;
00125
00126 };
00127
00129
00130
00131
00132
00136 typedef JDXarray<sarray,JDXstring> JDXstringArr;
00137
00141 typedef JDXarray<iarray,JDXint> JDXintArr;
00142
00146 typedef JDXarray<farray,JDXfloat> JDXfloatArr;
00147
00151 typedef JDXarray<darray,JDXdouble> JDXdoubleArr;
00152
00156 typedef JDXarray<carray,JDXcomplex> JDXcomplexArr;
00157
00158
00159
00161
00162
00163
00167 class JDXtriple : public JDXfloatArr {
00168
00169 public:
00170
00174 JDXtriple () : JDXfloatArr(farray(3)) {}
00175
00186 JDXtriple (float xpos,float ypos, float zpos,
00187 const STD_string& name="",bool userParameter=true,
00188 compatMode mode=notBroken,parameterMode parameter_mode=edit);
00189
00193 JDXtriple (const JDXtriple& pos) {JDXtriple::operator = (pos);}
00194
00198 JDXtriple& operator = (const JDXtriple& pos) {
00199 JDXfloatArr::operator = (pos);
00200 return *this;
00201 }
00202
00203
00204 const char* get_typeInfo() const {return "triple";}
00205 JcampDxClass* create_copy() const {return new JDXtriple(*this);}
00206 JDXtriple* cast(JDXtriple*) {return this;}
00207 farray* cast(farray*) {return 0;}
00208
00209 };
00210
00214 #endif
00215