jdxtypes.h
1 /***************************************************************************
2  jdxtypes.h - description
3  -------------------
4  begin : Sun Jun 6 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 JDXTYPES_H
19 #define JDXTYPES_H
20 
21 
22 #include <odinpara/jdxbase.h>
23 
24 
30 
31 
36 class JDXstring : public STD_string, public virtual JcampDxClass {
37 
38  public:
39 
43  JDXstring () : STD_string() {}
44 
54  JDXstring (const STD_string& ss,const STD_string& name="",bool userParameter=true,
55  compatMode mode=notBroken,parameterMode parameter_mode=edit,
56  const STD_string& parx_equivalent="");
57 
58 
62  JDXstring (int i,const char c=' ') : STD_string(i,c) {}
63 
67  JDXstring (const char *charptr) : STD_string(charptr) {}
68 
73 
77  JDXstring& operator = (const STD_string& ss) {STD_string::operator = (ss); return *this;}
78 
82  JDXstring& operator = (const char *charptr) {STD_string::operator = (charptr); return *this;}
83 
87  JDXstring& operator = (const JDXstring& ss);
88 
92  friend STD_ostream& operator << (STD_ostream& s,const JDXstring& t) {return s << STD_string(t);}
93 
94 
95  // overwriting virtual functions from JcampDxClass
96  bool parsevalstring (const STD_string& parstring);
97  STD_string printvalstring() const;
98  STD_string get_parx_code(parxCodeType type, const ParxEquiv& equiv) const;
99  ParxEquiv get_parx_equiv() const {parx_equiv.type="char"; return parx_equiv;}
100  const char* get_typeInfo() const {return "string";}
101  JcampDxClass* create_copy() const {return new JDXstring(*this);}
102  STD_string* cast(STD_string*) {return this;}
103 
104  private:
105  mutable ParxEquiv parx_equiv;
106 
107 };
108 
109 
110 
112 
117 class JDXbool : public virtual JcampDxClass {
118 
119  public:
120 
124  JDXbool () : val(false) {}
125 
135  JDXbool(bool flag, const STD_string& name="",
136  bool userParameter=true, compatMode mode=notBroken,
137  parameterMode parameter_mode=edit,
138  const STD_string& parx_equivalent="");
139 
144 
148  JDXbool& operator = (bool flag) {val=flag; return *this;}
149 
154  JDXbool& operator = (const STD_string& s) {parsevalstring(s); return *this;}
155 
159  JDXbool& operator = (const JDXbool& jb);
160 
164  operator bool () const {return val;}
165 
166  // overwriting virtual functions from JcampDxClass
167  bool parsevalstring (const STD_string& parstring);
168  STD_string printvalstring() const;
169  STD_string get_parx_code(parxCodeType type, const ParxEquiv& equiv) const;
170  ParxEquiv get_parx_equiv() const {parx_equiv.type="YesNo"; return parx_equiv;}
171  const char* get_typeInfo() const {return "bool";}
172  JcampDxClass* create_copy() const {return new JDXbool(*this);}
173  bool* cast(bool*) {return &val;}
174 
175  private:
176  bool val;
177  mutable ParxEquiv parx_equiv;
178 };
179 
180 
182 
187 class JDXenum : public virtual JcampDxClass {
188 
189  public:
190 
194  JDXenum() {actual=entries.end();}
195 
205  JDXenum(const STD_string& first_entry, const STD_string& name="",
206  bool userParameter=true, compatMode mode=notBroken,
207  parameterMode parameter_mode=edit, const STD_string& parx_equivalent="");
208 
213 
214 
218  JDXenum& operator = (const char* item) {set_actual(STD_string(item)); return *this;}
219 
223  JDXenum& operator = (const STD_string& item) {set_actual(item); return *this;}
224 
228  JDXenum& operator = (int item) {set_actual(item); return *this;}
229 
233  JDXenum& operator = (const JDXenum& je);
234 
240  JDXenum& add_item(const STD_string& item, int index=-1);
241 
245  JDXenum& set_actual(const STD_string& item);
246 
250  JDXenum& set_actual(int index);
251 
255  JDXenum& clear();
256 
260  operator int () const;
261 
265  operator STD_string () const;
266 
270  bool operator == (const STD_string& s) const {return (operator STD_string ())==s;}
271 
275  bool operator == (const char* s) const {return (operator STD_string ())==STD_string(s);}
276 
280  bool operator == (int i) const {return (operator int ())==i;}
281 
285  bool operator != (const STD_string& s) const {return (operator STD_string ())!=s;}
286 
290  bool operator != (const char* s) const {return (operator STD_string ())!=STD_string(s);}
291 
295  bool operator != (int i) const {return (operator int ())!=i;}
296 
297 
301  unsigned int n_items() const {return entries.size();}
302 
306  const STD_string& get_item(unsigned int index) const;
307 
311  unsigned int get_item_index() const;
312 
316  JDXenum& set_item_index(unsigned int index);
317 
318 
319  // overwriting virtual functions from JcampDxClass
320  bool parsevalstring (const STD_string& parstring);
321  STD_string printvalstring() const;
322  svector get_alternatives() const;
323  STD_string get_parx_code(parxCodeType type, const ParxEquiv& equiv) const;
324  ParxEquiv get_parx_equiv() const;
325  const char* get_typeInfo() const {return "enum";}
326  JcampDxClass* create_copy() const {return new JDXenum(*this);}
327  JDXenum* cast(JDXenum*) {return this;}
328 
329  private:
330  STD_map<int,STD_string> entries;
331  STD_map<int,STD_string>::const_iterator actual;
332  mutable ParxEquiv parx_equiv;
333 
334  STD_string parxtype_cache;
335 
336 };
337 
339 
344 class JDXaction : public virtual JcampDxClass {
345 
346  public:
347 
351  JDXaction() : state(false) {set_filemode(exclude);}
352 
361  JDXaction(bool init_state, const STD_string& name="",
362  bool userParameter=true, compatMode mode=notBroken,
363  parameterMode parameter_mode=edit);
364 
369 
373  JDXaction& operator = (const JDXaction& ja);
374 
378  operator bool () const;
379 
383  JDXaction& trigger_action() {state=true; return *this;}
384 
385  // overwriting virtual functions from JcampDxClass
386  bool parsevalstring (const STD_string& parstring);
387  STD_string printvalstring() const;
388  const char* get_typeInfo() const {return "action";}
389  JcampDxClass* create_copy() const {return new JDXaction(*this);}
390  JDXaction* cast(JDXaction*) {return this;}
391 
392  private:
393  mutable bool state;
394 };
395 
396 
397 
398 
400 
401 
421 class JDXfileName : public JDXstring {
422 
423 public:
424 
428  JDXfileName () {common_init();}
429 
438  JDXfileName (const STD_string& filename, const STD_string& name="",
439  bool userParameter=true, compatMode mode=notBroken,
440  parameterMode parameter_mode=edit);
441 
445  JDXfileName(const JDXfileName& jf);
446 
450  JDXfileName& operator = (const STD_string& filename);
451 
455  JDXfileName& operator = (const JDXfileName& jf);
456 
460  bool exists() const;
461 
465  STD_string get_basename() const {return basename_cache;}
466 
471  STD_string get_basename_nosuffix() const;
472 
476  STD_string get_dirname() const {return dirname_cache;}
477 
481  STD_string get_suffix() const {return suffix_cache;}
482 
486  JDXfileName& set_suffix(const STD_string& suff) {suffix_cache=suff; return *this;}
487 
491  STD_string get_defaultdir() const {return defaultdir;}
492 
496  JDXfileName& set_defaultdir(const STD_string& defdir);
497 
498 
502  bool is_dir() const {return dir;}
503 
507  JDXfileName& set_dir(bool flag) {dir=flag; return *this;}
508 
509 
510  // overwriting virtual functions from JcampDxClass
511  bool parsevalstring (const STD_string& parstring);
512  const char* get_typeInfo() const {return "fileName";}
513  JcampDxClass* create_copy() const {return new JDXfileName(*this);}
514  JDXfileName* cast(JDXfileName*) {return this;}
515 
516 private:
517 
518  static void normalize(const STD_string& fname, bool dir, STD_string& result, STD_string& result_dirname, STD_string& result_basename, STD_string& result_suffix);
519 
520  void common_init() {dir=false;}
521 
522  STD_string defaultdir;
523  STD_string dirname_cache;
524  STD_string basename_cache;
525  STD_string suffix_cache;
526 
527  bool dir;
528 
529 };
530 
532 
537 class JDXformula : public JDXstring {
538 
539 public:
540 
545 
554  JDXformula (const STD_string& formula, const STD_string& name="",
555  bool userParameter=true, compatMode mode=notBroken,
556  parameterMode parameter_mode=edit);
557 
562 
566  JDXformula& operator = (const STD_string& formula) {JDXstring::operator = (formula); return *this;}
567 
571  JDXformula& operator = (const JDXformula& jf);
572 
576  JDXformula& set_syntax(const STD_string& syn) {syntax=syn; return *this;}
577 
581  STD_string get_syntax() const {return syntax;}
582 
583  // overwriting virtual functions from JcampDxClass
584  const char* get_typeInfo() const {return "formula";}
585  JcampDxClass* create_copy() const {return new JDXformula(*this);}
586  JDXformula* cast(JDXformula*) {return this;}
587 
588 private:
589  STD_string syntax;
590 };
591 
592 
593 
597 #endif
598