source: Sophya/trunk/SophyaLib/BaseTools/mutyv.h@ 2322

Last change on this file since 2322 was 2322, checked in by cmv, 23 years ago
  • passage xxstream.h en xxstream
  • compile avec gcc_3.2, gcc_2.96 et cxx En 3.2 le seek from ::end semble marcher (voir Eval/COS/pbseekios.cc)

rz+cmv 11/2/2003

File size: 3.9 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2// Classe MuTyV : Variable multi-type numerique
3// Reza Ansari - 96-2000
4
5#ifndef MUTYV_H_SEEN
6#define MUTYV_H_SEEN
7
8#include "machdefs.h"
9
10#include <string>
11#include <complex>
12#include <iostream>
13
14namespace SOPHYA {
15
16// Classe utilitaire pour manipuler des variables typees
17//! A simple class for holding string, integer, float and complex type values.
18
19class MuTyV {
20public:
21
22 enum MTVType {
23 MTVInteger,
24 MTVFloat,
25 MTVComplex,
26 MTVString
27 };
28
29 inline MuTyV() { typ = MTVInteger; iv = 0; dv = dv_im = 0.; strv = NULL; }
30 MuTyV(MuTyV const & a);
31 inline MuTyV(uint_2 i) { typ = MTVInteger; iv = (int_8)i; dv = (r_8)i; dv_im = 0.; strv = NULL; }
32 inline MuTyV(uint_8 i) { typ = MTVInteger; iv = (int_8)i; dv = (r_8)i; dv_im = 0.; strv = NULL; }
33 inline MuTyV(int_4 i) { typ = MTVInteger; iv = (int_8)i; dv = (r_8)i; dv_im = 0.; strv = NULL; }
34 inline MuTyV(int_8 i) { typ = MTVInteger; iv = i; dv = (r_8)i; dv_im = 0.; strv = NULL; }
35 inline MuTyV(r_4 f) { typ = MTVFloat; dv = (r_8)f; iv = (int_8)f; dv_im = 0.; strv = NULL; }
36 inline MuTyV(r_8 d) { typ = MTVFloat; dv = d; iv = (int_8)d; dv_im = 0.; strv = NULL; }
37 inline MuTyV(complex<r_4> const& z) { typ = MTVComplex; dv = (r_8)z.real(); dv_im = z.imag();
38 iv = (int_8)dv; strv = NULL; }
39 inline MuTyV(complex<r_8> const& z) { typ = MTVComplex; dv = z.real(); dv_im = z.imag();
40 iv = (int_8)dv; strv = NULL; }
41
42 MuTyV(char const* s);
43 MuTyV(string const& s);
44
45 ~MuTyV();
46
47 MuTyV & operator= (MuTyV const & a);
48 inline MuTyV & operator= (uint_2 v) { typ = MTVInteger; iv = (int_8)v; dv = (r_8)v; dv_im = 0.; return(*this); }
49 inline MuTyV & operator= (uint_8 v) { typ = MTVInteger; iv = (int_8)v; dv = (r_8)v; dv_im = 0.; return(*this); }
50 inline MuTyV & operator= (int_4 v) { typ = MTVInteger; iv = (int_8)v; dv = (r_8)v; dv_im = 0.; return(*this); }
51 inline MuTyV & operator= (int_8 v) { typ = MTVInteger; iv = v; dv = (r_8)v; dv_im = 0.; return(*this); }
52 inline MuTyV & operator= (r_4 v) { typ = MTVFloat; dv = (r_8)v; iv = (int_8)v; dv_im = 0.; return(*this); }
53 inline MuTyV & operator= (r_8 v) { typ = MTVFloat; dv = v; iv = (int_8)v; dv_im = 0.; return(*this); }
54 inline MuTyV & operator= (complex<r_4> const& v) { typ = MTVComplex; dv = (r_8)v.real(); dv_im = v.imag();
55 iv = (int_8)dv; return(*this); }
56 inline MuTyV & operator= (complex<r_8> const& v) { typ = MTVComplex; dv = (r_8)v.real(); dv_im = v.imag();
57 iv = (int_8)dv; return(*this); }
58 char* operator= (char* s);
59 string& operator= (string& s);
60
61 inline operator uint_2() const { return((uint_2)iv); }
62 inline operator uint_4() const { return((uint_4)iv); }
63 inline operator uint_8() const { return((uint_8)iv); }
64 inline operator int_4() const { return((int_4)iv); }
65 inline operator int_8() const { return(iv); }
66 inline operator r_4() const { return((r_4)dv); }
67 inline operator r_8() const { return(dv); }
68 inline operator complex<r_4>() const { return(complex<r_4>((r_4)dv, (r_4)dv_im)); }
69 inline operator complex<r_8>() const { return(complex<r_8>(dv, dv_im)); }
70
71 operator string() const ;
72
73 inline MTVType Type() const { return typ; }
74 inline int_8 GetIntPart() const { return iv; }
75 inline r_8 GetRealPart() const { return dv; }
76 inline r_8 GetImagPart() const { return dv_im; }
77 inline string* GetStringPointer() const { return (strv); }
78
79protected:
80 int_8 iv;
81 r_8 dv;
82 r_8 dv_im; /* for holding imaginary part of a complex */
83 string * strv;
84 MTVType typ;
85
86};
87
88inline ostream& operator << (ostream& s, MuTyV const & mtv)
89{ s << (string)mtv; return(s); }
90
91
92} // namespace SOPHYA
93
94#endif /* MUTYV_H_SEEN */
95
96
Note: See TracBrowser for help on using the repository browser.