This is Unofficial EPICS BASE Doxygen Site
osiWireFormat.h File Reference
#include "epicsTypes.h"
#include "osdWireFormat.h"
+ Include dependency graph for osiWireFormat.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  AlignedWireRef< T >
 
class  AlignedWireRef< const T >
 
union  WireAlias< T >
 
union  WireAlias< epicsInt8 >
 
union  WireAlias< epicsInt16 >
 
union  WireAlias< epicsInt32 >
 
union  WireAlias< epicsFloat32 >
 

Functions

template<class T >
void WireGet (const epicsUInt8 *pWireSrc, T &)
 
template<class T >
void WireSet (const T &, epicsUInt8 *pWireDst)
 
template<class T >
void AlignedWireGet (const T &, T &)
 
template<class T >
void AlignedWireSet (const T &, T &)
 
epicsUInt16 byteSwap (const epicsUInt16 &src)
 
epicsUInt32 byteSwap (const epicsUInt32 &src)
 
template<>
void WireGet< epicsUInt8 > (const epicsUInt8 *pWireSrc, epicsUInt8 &dst)
 
template<>
void WireGet< epicsUInt16 > (const epicsUInt8 *pWireSrc, epicsUInt16 &dst)
 
template<>
void WireGet< epicsUInt32 > (const epicsUInt8 *pWireSrc, epicsUInt32 &dst)
 
template<>
void WireSet< epicsUInt8 > (const epicsUInt8 &src, epicsUInt8 *pWireDst)
 
template<>
void WireSet< epicsUInt16 > (const epicsUInt16 &src, epicsUInt8 *pWireDst)
 
template<>
void WireSet< epicsUInt32 > (const epicsUInt32 &src, epicsUInt8 *pWireDst)
 

Function Documentation

template<class T >
void AlignedWireGet ( const T &  src,
T &  dst 
)
inline

Definition at line 232 of file osiWireFormat.h.

233 {
234  // copy through union here
235  // a) prevents over-aggressive optimization under strict aliasing rules
236  // b) doesnt preclude extra copy operation being optimized away
237  WireAlias < T > srcu, dstu;
238  srcu._o = src;
239  AlignedWireGet ( srcu._u, dstu._u );
240  dst = dstu._o;
241 }
void AlignedWireGet(const T &, T &)
template<class T >
void AlignedWireSet ( const T &  src,
T &  dst 
)
inline

Definition at line 244 of file osiWireFormat.h.

245 {
246  // copy through union here
247  // a) prevents over-aggressive optimization under strict aliasing rules
248  // b) doesnt preclude extra copy operation being optimized away
249  WireAlias < T > srcu, dstu;
250  srcu._o = src;
251  AlignedWireSet ( srcu._u, dstu._u );
252  dst = dstu._o;
253 }
void AlignedWireSet(const T &, T &)
epicsUInt16 byteSwap ( const epicsUInt16 src)
inline

Definition at line 108 of file osiWireFormat.h.

109 {
110  return static_cast < epicsUInt16 >
111  ( ( src << 8u ) | ( src >> 8u ) );
112 }
unsigned short epicsUInt16
Definition: epicsTypes.h:41
epicsUInt32 byteSwap ( const epicsUInt32 src)
inline

Definition at line 115 of file osiWireFormat.h.

116 {
117  epicsUInt32 tmp0 = byteSwap (
118  static_cast < epicsUInt16 > ( src >> 16u ) );
119  epicsUInt32 tmp1 = byteSwap (
120  static_cast < epicsUInt16 > ( src ) );
121  return static_cast < epicsUInt32 >
122  ( ( tmp1 << 16u ) | tmp0 );
123 }
unsigned int epicsUInt32
Definition: epicsTypes.h:43
epicsUInt16 byteSwap(const epicsUInt16 &src)
template<class T >
void WireGet ( const epicsUInt8 pWireSrc,
T &  dst 
)
inline

Definition at line 159 of file osiWireFormat.h.

160 {
161  // copy through union here
162  // a) prevents over-aggressive optimization under strict aliasing rules
163  // b) doesnt preclude extra copy operation being optimized away
164  WireAlias < T > tmp;
165  WireGet ( pWireSrc, tmp._u );
166  dst = tmp._o;
167 }
void WireGet(const epicsUInt8 *pWireSrc, T &)
template<>
void WireGet< epicsUInt16 > ( const epicsUInt8 pWireSrc,
epicsUInt16 dst 
)
inline

Definition at line 177 of file osiWireFormat.h.

179 {
180  dst = static_cast < epicsUInt16 > (
181  ( pWireSrc[0] << 8u ) | pWireSrc[1] );
182 }
unsigned short epicsUInt16
Definition: epicsTypes.h:41
template<>
void WireGet< epicsUInt32 > ( const epicsUInt8 pWireSrc,
epicsUInt32 dst 
)
inline

Definition at line 185 of file osiWireFormat.h.

187 {
188  dst = static_cast < epicsUInt32 > (
189  ( pWireSrc[0] << 24u ) |
190  ( pWireSrc[1] << 16u ) |
191  ( pWireSrc[2] << 8u ) |
192  pWireSrc[3] );
193 }
unsigned int epicsUInt32
Definition: epicsTypes.h:43
template<>
void WireGet< epicsUInt8 > ( const epicsUInt8 pWireSrc,
epicsUInt8 dst 
)
inline

Definition at line 170 of file osiWireFormat.h.

172 {
173  dst = pWireSrc[0];
174 }
template<class T >
void WireSet ( const T &  src,
epicsUInt8 pWireDst 
)
inline

Definition at line 196 of file osiWireFormat.h.

197 {
198  // copy through union here
199  // a) prevents over-aggressive optimization under strict aliasing rules
200  // b) doesnt preclude extra copy operation being optimized away
201  WireAlias < T > tmp;
202  tmp._o = src;
203  WireSet ( tmp._u, pWireDst );
204 }
void WireSet(const T &, epicsUInt8 *pWireDst)
template<>
void WireSet< epicsUInt16 > ( const epicsUInt16 src,
epicsUInt8 pWireDst 
)
inline

Definition at line 214 of file osiWireFormat.h.

216 {
217  pWireDst[0] = static_cast < epicsUInt8 > ( src >> 8u );
218  pWireDst[1] = static_cast < epicsUInt8 > ( src );
219 }
unsigned char epicsUInt8
Definition: epicsTypes.h:39
template<>
void WireSet< epicsUInt32 > ( const epicsUInt32 src,
epicsUInt8 pWireDst 
)
inline

Definition at line 222 of file osiWireFormat.h.

224 {
225  pWireDst[0] = static_cast < epicsUInt8 > ( src >> 24u );
226  pWireDst[1] = static_cast < epicsUInt8 > ( src >> 16u );
227  pWireDst[2] = static_cast < epicsUInt8 > ( src >> 8u );
228  pWireDst[3] = static_cast < epicsUInt8 > ( src );
229 }
unsigned char epicsUInt8
Definition: epicsTypes.h:39
template<>
void WireSet< epicsUInt8 > ( const epicsUInt8 src,
epicsUInt8 pWireDst 
)
inline

Definition at line 207 of file osiWireFormat.h.

209 {
210  pWireDst[0] = src;
211 }