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 ACE_CDR_BASE_H
00029 #define ACE_CDR_BASE_H
00030
00031 #include "ace/pre.h"
00032
00033 #include "ace/config-all.h"
00034
00035 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00036 # pragma once
00037 #endif
00038
00039 #include "ace/Basic_Types.h"
00040 #include "ace/Message_Block.h"
00041
00042
00043
00044
00045
00046
00047
00048 class ACE_Export ACE_CDR
00049 {
00050 public:
00051
00052
00053
00054
00055
00056 enum
00057 {
00058
00059
00060
00061
00062 OCTET_SIZE = 1,
00063 SHORT_SIZE = 2,
00064 LONG_SIZE = 4,
00065 LONGLONG_SIZE = 8,
00066 LONGDOUBLE_SIZE = 16,
00067
00068 OCTET_ALIGN = 1,
00069 SHORT_ALIGN = 2,
00070 LONG_ALIGN = 4,
00071 LONGLONG_ALIGN = 8,
00072
00073
00074 LONGDOUBLE_ALIGN = 8,
00075
00076
00077
00078 MAX_ALIGNMENT = 8,
00079
00080
00081
00082
00083
00084
00085
00086 DEFAULT_BUFSIZE = ACE_DEFAULT_CDR_BUFSIZE,
00087
00088
00089
00090 EXP_GROWTH_MAX = ACE_DEFAULT_CDR_EXP_GROWTH_MAX,
00091
00092
00093
00094
00095 LINEAR_GROWTH_CHUNK = ACE_DEFAULT_CDR_LINEAR_GROWTH_CHUNK
00096 };
00097
00098
00099
00100
00101
00102
00103
00104 static void swap_2 (const char *orig, char *target);
00105 static void swap_4 (const char *orig, char *target);
00106 static void swap_8 (const char *orig, char *target);
00107 static void swap_16 (const char *orig, char *target);
00108 static void swap_2_array (const char *orig,
00109 char *target,
00110 size_t length);
00111 static void swap_4_array (const char *orig,
00112 char *target,
00113 size_t length);
00114 static void swap_8_array (const char *orig,
00115 char *target,
00116 size_t length);
00117 static void swap_16_array (const char *orig,
00118 char *target,
00119 size_t length);
00120
00121
00122
00123 static void mb_align (ACE_Message_Block *mb);
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135 static size_t first_size (size_t minsize);
00136
00137
00138
00139 static size_t next_size (size_t minsize);
00140
00141
00142
00143
00144
00145
00146
00147 static int grow (ACE_Message_Block *mb, size_t minsize);
00148
00149
00150
00151
00152 static void consolidate (ACE_Message_Block *dst,
00153 const ACE_Message_Block *src);
00154
00155 static size_t total_length (const ACE_Message_Block *begin,
00156 const ACE_Message_Block *end);
00157
00158
00159
00160
00161 # if defined (CHORUS) && defined (ghs) && !defined (__STANDARD_CXX)
00162
00163
00164 typedef unsigned long Boolean;
00165 # else
00166 typedef u_char Boolean;
00167 # endif
00168
00169 typedef u_char Octet;
00170 typedef char Char;
00171 typedef ACE_OS::WChar WChar;
00172 typedef ACE_INT16 Short;
00173 typedef ACE_UINT16 UShort;
00174 typedef ACE_INT32 Long;
00175 typedef ACE_UINT32 ULong;
00176 typedef ACE_UINT64 ULongLong;
00177
00178 # if (defined (_MSC_VER) && (_MSC_VER >= 900)) \
00179 || (defined (__BORLANDC__) && (__BORLANDC__ >= 0x530))
00180 typedef __int64 LongLong;
00181 # elif ACE_SIZEOF_LONG == 8 && !defined(_CRAYMPP)
00182 typedef long LongLong;
00183 # elif ACE_SIZEOF_LONG_LONG == 8 && !defined (ACE_LACKS_LONGLONG_T)
00184 # if defined (sun) && !defined (ACE_LACKS_U_LONGLONG_T) && !defined (__KCC)
00185
00186
00187
00188 typedef longlong_t LongLong;
00189 # else
00190
00191 typedef long long LongLong;
00192 # endif
00193 # else
00194 # define NONNATIVE_LONGLONG
00195 # if defined (ACE_BIG_ENDIAN)
00196 struct ACE_Export LongLong
00197 {
00198 ACE_CDR::Long h;
00199 ACE_CDR::Long l;
00200 int operator== (const LongLong &rhs) const;
00201 int operator!= (const LongLong &rhs) const;
00202 };
00203 # else
00204 struct ACE_Export LongLong
00205 {
00206 ACE_CDR::Long l;
00207 ACE_CDR::Long h;
00208 int operator== (const LongLong &rhs) const;
00209 int operator!= (const LongLong &rhs) const;
00210 };
00211 # endif
00212 # endif
00213
00214 # if defined (NONNATIVE_LONGLONG)
00215 # define ACE_CDR_LONGLONG_INITIALIZER {0,0}
00216 # else
00217 # define ACE_CDR_LONGLONG_INITIALIZER 0
00218 # endif
00219
00220 # if ACE_SIZEOF_FLOAT == 4
00221 typedef float Float;
00222 # else
00223 struct Float
00224 {
00225 # if ACE_SIZEOF_INT == 4
00226
00227 u_int f;
00228 # else
00229
00230 char f[4];
00231 # if defined(_UNICOS) && !defined(_CRAYMPP)
00232 Float (void);
00233 Float (const float &init);
00234 Float & operator= (const float &rhs);
00235 int operator!= (const Float &rhs) const;
00236 # endif
00237 # endif
00238 };
00239 # endif
00240
00241 # if ACE_SIZEOF_DOUBLE == 8
00242 typedef double Double;
00243 # else
00244 struct Double
00245 {
00246 # if ACE_SIZEOF_LONG == 8
00247
00248 u_long f;
00249 # else
00250
00251 char f[8];
00252 # endif
00253 };
00254 # endif
00255
00256
00257
00258
00259
00260
00261 # if ACE_SIZEOF_LONG_DOUBLE == 16
00262 typedef long double LongDouble;
00263 # define ACE_CDR_LONG_DOUBLE_INITIALIZER 0
00264 # else
00265 # define NONNATIVE_LONGDOUBLE
00266 # define ACE_CDR_LONG_DOUBLE_INITIALIZER {{0}}
00267 struct ACE_Export LongDouble
00268 {
00269 char ld[16];
00270 int operator== (const LongDouble &rhs) const;
00271 int operator!= (const LongDouble &rhs) const;
00272
00273 };
00274 # endif
00275
00276 #if !defined (ACE_CDR_GIOP_MAJOR_VERSION)
00277 # define ACE_CDR_GIOP_MAJOR_VERSION 1
00278 #endif
00279
00280 #if !defined (ACE_CDR_GIOP_MINOR_VERSION)
00281 # define ACE_CDR_GIOP_MINOR_VERSION 2
00282 #endif
00283 };
00284
00285 #if defined (__ACE_INLINE__)
00286 # include "ace/CDR_Base.inl"
00287 #endif
00288
00289
00290 #include "ace/post.h"
00291
00292 #endif