Changeset 7382


Ignore:
Timestamp:
05/01/18 20:18:51 (6 months ago)
Author:
baker
Message:

using void * pointers and #defines, unify 16/32/64-bit byte swap routines

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/swap.h

    r6803 r7382  
    1  
    21/* 
    32 *   THIS FILE IS UNDER RCS - DO NOT MODIFY UNLESS YOU HAVE 
     
    2726#define SWAP_H 
    2827 
    29 #include <earthworm_simple_funcs.h> 
    30 #include <trace_buf.h> 
    31 #include <platform.h> 
     28#include "earthworm_simple_funcs.h" 
     29#include "trace_buf.h" 
     30#include "platform.h" 
    3231 
    3332#ifdef WIN64  /* use keyword to address alignment issues with 64-bit Windows */ 
     
    3938/* include file for swap.c: handy routines for swapping earthwormy things */ 
    4039 
    41 void SwapShort( short * );                  /* swap.c       sys-independent  */ 
    42 void SwapInt32( int32_t * );                /* swap.c       sys-independent  */ 
    43 void SwapUint32( uint32_t * );              /* swap.c       sys-independent  */ 
    44 void SwapInt( int * );                      /* swap.c       sys-independent  */ 
    45 void SwapDouble( EW_UNALIGNED double * );   /* swap.c       sys-independent  */ 
    46 void SwapFloat( float * );                  /* swap.c       sys-independent  */ 
     40void SwapUint16( void * ); 
     41#define SwapInt16( data ) SwapUint16( data ) 
     42#define SwapShort( data ) SwapUint16( data ) 
     43void SwapUint32( void * ); 
     44#define SwapInt32( data ) SwapUint32( data ) 
     45#define SwapInt( data ) SwapUint32( data ) 
     46#define SwapFloat( data ) SwapUint32( data ) 
     47void SwapUint64( EW_UNALIGNED void * ); 
     48#define SwapInt64( data ) SwapUint64( data ) 
     49#define SwapDouble( data ) SwapUint64( data ) 
    4750 
    4851/* fixes wave message into local byte order, based on globals _SPARC and _INTEL */ 
  • trunk/src/libsrc/util/swap.c

    r6803 r7382  
    1  
    21/* 
    32 *   THIS FILE IS UNDER RCS - DO NOT MODIFY UNLESS YOU HAVE 
     
    8281#include <stdlib.h> 
    8382#include <string.h> 
    84 #include <swap.h> 
     83 
     84#include "swap.h" 
    8585 
    8686static int WaveMsgVersionMakeLocal( TRACE2X_HEADER* wvmsg, char version ); 
     
    8888int32_t testInt32Var = 0; 
    8989 
    90 void SwapShort( short *data ) 
     90/* SwapUint16: Byte swap 2-byte unsigned integer */ 
     91void SwapUint16( void *data ) 
    9192{ 
    9293   char temp; 
    93  
    9494   union { 
    9595      char  c[2]; 
    9696   } dat; 
    9797 
    98    memcpy( &dat, data, sizeof(short) ); 
     98   memcpy( &dat, data, 2 ); 
    9999   temp     = dat.c[0]; 
    100100   dat.c[0] = dat.c[1]; 
    101101   dat.c[1] = temp; 
    102    memcpy( data, &dat, sizeof(short) ); 
    103    return; 
    104 } 
    105  
    106 /* Do byte swapping on the given 4-byte integer. */ 
    107 void SwapInt32( int32_t *data ) 
     102   memcpy( data, &dat, 2 ); 
     103} 
     104 
     105/* SwapUint32: Byte swap 4-byte unsigned integer */ 
     106void SwapUint32( void *data ) 
    108107{ 
    109108   char temp; 
    110  
    111109   union { 
    112110      char c[4]; 
    113111   } dat; 
    114112 
    115    memcpy( &dat, data, sizeof(int32_t) ); 
     113   memcpy( &dat, data, 4 ); 
    116114   temp     = dat.c[0]; 
    117115   dat.c[0] = dat.c[3]; 
     
    120118   dat.c[1] = dat.c[2]; 
    121119   dat.c[2] = temp; 
    122    memcpy( data, &dat, sizeof(int32_t) ); 
    123    return; 
    124 } 
    125  
    126 /* Do byte swapping on the given 4-byte unsigned integer. */ 
    127 /* (Same as signed integer).                              */ 
    128 void SwapUint32( uint32_t *data ) 
    129 { 
    130   SwapInt32( (int32_t *)data ); 
    131 } 
    132  
    133 /* Do byte swapping on the given 4-byte integer. */ 
    134 /* (Delegates to 'SwapInt32()' function.)        */ 
    135 void SwapInt( int *data ) 
    136 { 
    137   SwapInt32( data ); 
    138 } 
    139  
    140 void SwapDouble( EW_UNALIGNED double *data ) 
     120   memcpy( data, &dat, 4 ); 
     121} 
     122 
     123/* SwapUint64: Byte swap 8-byte unsigned integer */ 
     124void SwapUint64( EW_UNALIGNED void *data ) 
    141125{ 
    142126   char temp; 
    143  
    144127   union { 
    145128       char   c[8]; 
    146129   } dat; 
    147130 
    148    memcpy( &dat, data, sizeof(double) ); 
     131   memcpy( &dat, data, 8 ); 
    149132   temp     = dat.c[0]; 
    150133   dat.c[0] = dat.c[7]; 
     
    162145   dat.c[3] = dat.c[4]; 
    163146   dat.c[4] = temp; 
    164    memcpy( data, &dat, sizeof(double) ); 
    165    return; 
     147   memcpy( data, &dat, 8 ); 
    166148} 
    167149 
     
    246228   else 
    247229        return(-1); /* We don't know this message type*/ 
    248  
    249  
    250230 
    251231   /* SWAP the header (if neccessary) */ 
     
    375355   return(0); 
    376356} 
    377  
    378  
    379 void SwapFloat( float *data ) 
    380 { 
    381    char temp; 
    382  
    383    union { 
    384       char c[4]; 
    385    } dat; 
    386  
    387    memcpy( &dat, data, sizeof(float) ); 
    388    temp     = dat.c[0]; 
    389    dat.c[0] = dat.c[3]; 
    390    dat.c[3] = temp; 
    391    temp     = dat.c[1]; 
    392    dat.c[1] = dat.c[2]; 
    393    dat.c[2] = temp; 
    394    memcpy( data, &dat, sizeof(float) ); 
    395    return; 
    396 } 
    397  
Note: See TracChangeset for help on using the changeset viewer.