00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef BL_FABCONV_H
00024 #define BL_FABCONV_H
00025
00026
00027
00028 #include <iosfwd>
00029
00030 #include <Array.H>
00031 #include <BLassert.H>
00032 #include <REAL.H>
00033
00034
00035
00037
00050 class IntDescriptor
00051 {
00052
00053 public:
00059 enum Ordering { NormalOrder = 1, ReverseOrder = 2 };
00060
00066 IntDescriptor ();
00067
00069
00070 IntDescriptor (long nb,
00071 Ordering ordering = NormalOrder);
00072
00074
00075 Ordering order () const;
00076
00078
00079 int numBytes () const;
00080
00082
00083 bool operator== (const IntDescriptor& id) const;
00084
00086
00087 bool operator!= (const IntDescriptor& id) const;
00088
00089 protected:
00090 long numbytes;
00091 Ordering ord;
00092 };
00093
00094
00096
00097 std::ostream& operator<< (std::ostream& os, const IntDescriptor& id);
00098
00100
00101 std::istream& operator>> (std::istream& is, IntDescriptor& id);
00102
00103
00104
00106
00137 class RealDescriptor
00138 {
00139 public:
00145 RealDescriptor ();
00146
00151 RealDescriptor (const long* format,
00152 const int* order,
00153 int order_length);
00154
00156
00157 RealDescriptor (const RealDescriptor& rhs);
00158
00160
00161 RealDescriptor& operator= (const RealDescriptor& rhs);
00162
00164
00165 virtual ~RealDescriptor ();
00166
00168
00169 const long* format () const;
00170
00172
00173 const Array<long>& formatarray () const;
00174
00176
00177 const int* order () const;
00178
00180
00181 const Array<int>& orderarray () const;
00182
00184
00185 int numBytes () const;
00186
00188
00189 bool operator== (const RealDescriptor& rd) const;
00190
00192
00193 bool operator != (const RealDescriptor& rd) const;
00194
00195
00197
00198 static void SetFixDenormals();
00199
00203 virtual RealDescriptor* clone () const;
00204
00210 static RealDescriptor* newRealDescriptor (int format,
00211 int precision,
00212 const char* systype,
00213 int ordering);
00214
00219 static void convertToNativeFormat (Real* out,
00220 long nitems,
00221 void* in,
00222 const RealDescriptor& id);
00223
00228 static void convertToNativeFormat (Real* out,
00229 long nitems,
00230 std::istream& is,
00231 const RealDescriptor& id);
00232
00236 static void convertFromNativeFormat (std::ostream& os,
00237 long nitems,
00238 const Real* in,
00239 const RealDescriptor& od);
00240
00245 static void convertFromNativeFormat (void* out,
00246 long nitems,
00247 Real* in,
00248 const RealDescriptor& od);
00249 protected:
00250 Array<long> fr;
00251 Array<int> ord;
00252 static bool bAlwaysFixDenormals;
00253 };
00254
00255
00257
00258 std::ostream& operator<< (std::ostream& os, const RealDescriptor& id);
00259
00261
00262 std::istream& operator>> (std::istream& is, RealDescriptor& id);
00263
00264 #endif