jdxarrays.h
1 /***************************************************************************
2  jdxarrays.h - description
3  -------------------
4  begin : Mon Jul 5 2004
5  copyright : (C) 2000-2014 by Thies H. Jochimsen
6  email : thies@jochimsen.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef JDXARRAYS_H
19 #define JDXARRAYS_H
20 
21 #include <tjutils/tjarray.h>
22 #include <odinpara/jdxbase.h>
23 #include <odinpara/jdxnumbers.h>
24 #include <odinpara/jdxtypes.h>
25 
26 
27 #define COMPRESSION_THRESHOLD_SIZE 256
28 
29 
41 template<class A,class J>
42 class JDXarray : public A, public virtual JcampDxClass {
43 
44  public:
45 
49  JDXarray () : A() {common_init();}
50 
62  JDXarray (const A& a,const STD_string& name="",bool userParameter=true,
63  compatMode mode=notBroken,parameterMode parameter_mode=edit,
64  const STD_string& parx_equivalent="",
65  float parx_assign_factor=1.0,float parx_assign_offset=0.0);
66 
70 // JDXarray (const J& jv) {common_init(); A::operator = (jv);}
71 
75  JDXarray (const JDXarray<A,J>& ja) {common_init(); JDXarray<A,J>::operator = (ja);}
76 
80  JDXarray<A,J>& operator = (const A& a);
81 
85  JDXarray<A,J>& operator = (const J& jv) {A::operator = (jv); return *this;}
86 
91 
92 
93  // overwriting virtual functions from JcampDxClass
94  STD_ostream& print2stream(STD_ostream& os) const;
95  STD_string printvalstring() const;
96  bool parsevalstring (const STD_string& parstring);
97  STD_string get_parx_code(parxCodeType type, const ParxEquiv& equiv) const;
98  ParxEquiv get_parx_equiv() const {return parx_equiv;}
99  GuiProps get_gui_props() const {return guiprops;}
100  JcampDxClass& set_gui_props(const GuiProps& gp) {guiprops=gp; return *this;}
101  const char* get_typeInfo() const;
102  JcampDxClass* create_copy() const {return new JDXarray<A,J>(*this);}
103  A* cast(A*) {return this;}
104 
105 
106  // final overrider
107  friend STD_ostream& operator << (STD_ostream& s,const JDXarray<A,J>& ja) { return ja.print2stream(s);}
108  int write(const STD_string& filename) const {return JcampDxClass::write(filename);}
109  int load(const STD_string &filename) {return JcampDxClass::load(filename);}
110 
111 
112  private:
113  void common_init();
114  STD_string get_dim_str() const;
115 
116  bool encode(STD_string* ostring, STD_ostream* ostream) const;
117 
118  bool use_compression() const {return (get_filemode()==compressed)&&(A::total()>COMPRESSION_THRESHOLD_SIZE);}
119 
120  ParxEquiv parx_equiv;
121 
122  GuiProps guiprops;
123 
124  mutable STD_string typeInfo_cache;
125 
126 };
127 
129 //
130 // Aliases:
131 //
132 
137 
142 
147 
152 
157 
158 
159 
161 // Specialised array classes:
162 
163 
167 class JDXtriple : public JDXfloatArr {
168 
169  public:
170 
174  JDXtriple () : JDXfloatArr(farray(3)) {}
175 
186  JDXtriple (float xpos,float ypos, float zpos,
187  const STD_string& name="",bool userParameter=true,
188  compatMode mode=notBroken,parameterMode parameter_mode=edit);
189 
194 
200  return *this;
201  }
202 
203  // overwriting virtual functions from JcampDxClass
204  const char* get_typeInfo() const {return "triple";}
205  JcampDxClass* create_copy() const {return new JDXtriple(*this);}
206  JDXtriple* cast(JDXtriple*) {return this;}
207  farray* cast(farray*) {return 0;} // disable casting to base class
208 
209 };
210 
214 #endif
215