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

Last change on this file since 1871 was 1871, checked in by ansari, 24 years ago

Adaptations (2) pour compil avec g++ 3.0 - Reza 18/01/2002

File size: 4.2 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.h>
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_8() const { return((uint_8)iv); }
63 inline operator int_4() const { return((int_4)iv); }
64 inline operator int_8() const { return(iv); }
65 inline operator r_4() const { return((r_4)dv); }
66 inline operator r_8() const { return(dv); }
67 inline operator complex<r_4>() const { return(complex<r_4>((r_4)dv, (r_4)dv_im)); }
68 inline operator complex<r_8>() const { return(complex<r_8>(dv, dv_im)); }
69
70 operator string() const ;
71
72 /* g++ a du mal avec les operateurs de conversion complex<T> */
73 /* On definit donc les deux methodes de conversion nommees explicitement */
74 inline complex<r_4> ToComplexF() const { return(complex<r_4>((r_4)dv, (r_4)dv_im)); }
75 inline complex<r_8> ToComplexD() const { return(complex<r_8>(dv, dv_im)); }
76
77 inline MTVType Type() const { return typ; }
78 inline int_8 GetIntPart() const { return iv; }
79 inline r_8 GetRealPart() const { return dv; }
80 inline r_8 GetImagPart() const { return dv_im; }
81 inline string* GetStringPointer() const { return (strv); }
82
83protected:
84 int_8 iv;
85 r_8 dv;
86 r_8 dv_im; /* for holding imaginary part of a complex */
87 string * strv;
88 MTVType typ;
89
90};
91
92inline ostream& operator << (ostream& s, MuTyV const & mtv)
93{ s << (string)mtv; return(s); }
94
95
96} // namespace SOPHYA
97
98#endif /* MUTYV_H_SEEN */
99
100
Note: See TracBrowser for help on using the repository browser.