00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _util_state_translate_h
00029 #define _util_state_translate_h
00030
00031 #ifdef HAVE_CONFIG_H
00032 #include <scconfig.h>
00033 #endif
00034
00035 #if defined(WORDS_BIGENDIAN)
00036 #define BIGENDIAN 1
00037 #else
00038 #define BIGENDIAN 0
00039 #endif
00040
00041 namespace sc {
00042
00045 class TranslateData {
00046 public:
00047 TranslateData();
00048 virtual ~TranslateData();
00049
00051 virtual char format_code();
00052
00055 static TranslateData *vctor(char code);
00056
00059 virtual void to_native (char *, int n);
00062 virtual void to_external(char *, int n);
00063 virtual void to_native (short *, int n);
00064 virtual void to_external(short *, int n);
00065 virtual void to_native (unsigned int *, int n);
00066 virtual void to_external(unsigned int *, int n);
00067 virtual void to_native (int *, int n);
00068 virtual void to_external(int *, int n);
00069 virtual void to_native (unsigned long *, int n);
00070 virtual void to_external(unsigned long *, int n);
00071 virtual void to_native (long *, int n);
00072 virtual void to_external(long *, int n);
00073 virtual void to_native (float *, int n);
00074 virtual void to_external(float *, int n);
00075 virtual void to_native (double *, int n);
00076 virtual void to_external(double *, int n);
00077
00080 virtual void to_native (char *target, const void *source, int n);
00083 virtual void to_external(void *target, const char *source, int n);
00084 virtual void to_native (short *, const void *, int n);
00085 virtual void to_external(void *, const short *, int n);
00086 virtual void to_native (unsigned int *, const void *, int n);
00087 virtual void to_external(void *, const unsigned int *, int n);
00088 virtual void to_native (int *, const void *, int n);
00089 virtual void to_external(void *, const int *, int n);
00090 virtual void to_native (unsigned long *, const void *, int n);
00091 virtual void to_external(void *, const unsigned long *, int n);
00092 virtual void to_native (long *, const void *, int n);
00093 virtual void to_external(void *, const long *, int n);
00094 virtual void to_native (float *, const void *, int n);
00095 virtual void to_external(void *, const float *, int n);
00096 virtual void to_native (double *, const void *, int n);
00097 virtual void to_external(void *, const double *, int n);
00098 };
00099
00102 class TranslateDataByteSwap: public TranslateData {
00103 public:
00104 TranslateDataByteSwap();
00105 virtual ~TranslateDataByteSwap();
00106
00108 virtual char format_code();
00109
00111 virtual void to_native (char *, int n);
00113 virtual void to_external(char *, int n);
00114 virtual void to_native (short *, int n);
00115 virtual void to_external(short *, int n);
00116 virtual void to_native (unsigned int *, int n);
00117 virtual void to_external(unsigned int *, int n);
00118 virtual void to_native (int *, int n);
00119 virtual void to_external(int *, int n);
00120 virtual void to_native (unsigned long *, int n);
00121 virtual void to_external(unsigned long *, int n);
00122 virtual void to_native (long *, int n);
00123 virtual void to_external(long *, int n);
00124 virtual void to_native (float *, int n);
00125 virtual void to_external(float *, int n);
00126 virtual void to_native (double *, int n);
00127 virtual void to_external(double *, int n);
00128
00130 virtual void to_native (char *, const void *, int n);
00132 virtual void to_external(void *, const char *, int n);
00133 virtual void to_native (short *, const void *, int n);
00134 virtual void to_external(void *, const short *, int n);
00135 virtual void to_native (unsigned int *, const void *, int n);
00136 virtual void to_external(void *, const unsigned int *, int n);
00137 virtual void to_native (int *, const void *, int n);
00138 virtual void to_external(void *, const int *, int n);
00139 virtual void to_native (unsigned long *, const void *, int n);
00140 virtual void to_external(void *, const unsigned long *, int n);
00141 virtual void to_native (long *, const void *, int n);
00142 virtual void to_external(void *, const long *, int n);
00143 virtual void to_native (float *, const void *, int n);
00144 virtual void to_external(void *, const float *, int n);
00145 virtual void to_native (double *, const void *, int n);
00146 virtual void to_external(void *, const double *, int n);
00147 };
00148
00149 #if BIGENDIAN
00150 typedef TranslateDataByteSwap TranslateDataLittleEndian;
00151 typedef TranslateData TranslateDataBigEndian;
00152 #else
00153 typedef TranslateDataByteSwap TranslateDataBigEndian;
00154 typedef TranslateData TranslateDataLittleEndian;
00155 #endif
00156
00157 class StateOut;
00158
00162 class TranslateDataOut {
00163 private:
00164 StateOut *so_;
00165 TranslateData *translate_;
00166
00167 enum { bufsize = 8192 };
00168 char buf_[bufsize];
00169 protected:
00170 int putv(const void*d,int s);
00171 public:
00174 TranslateDataOut(StateOut*s, TranslateData*t);
00175 virtual ~TranslateDataOut();
00176
00179 virtual int put(const char*,int);
00180 virtual int put(const short*,int);
00181 virtual int put(const unsigned int*,int);
00182 virtual int put(const int*,int);
00183 virtual int put(const unsigned long*,int);
00184 virtual int put(const long*,int);
00185 virtual int put(const float*,int);
00186 virtual int put(const double*,int);
00187
00189 TranslateData *translator() { return translate_; }
00190 };
00191
00192 class StateIn;
00193
00197 class TranslateDataIn {
00198 private:
00199 StateIn *si_;
00200 TranslateData *translate_;
00201 protected:
00202 int getv(void*d,int s);
00203 public:
00206 TranslateDataIn(StateIn*s, TranslateData *t);
00207 virtual ~TranslateDataIn();
00208
00211 virtual int get(char*,int);
00212 virtual int get(short*,int);
00213 virtual int get(unsigned int*,int);
00214 virtual int get(int*,int);
00215 virtual int get(unsigned long*,int);
00216 virtual int get(long*,int);
00217 virtual int get(float*,int);
00218 virtual int get(double*,int);
00219
00221 TranslateData *translator() { return translate_; }
00222 };
00223
00224 }
00225
00226 #endif
00227
00228
00229
00230
00231