00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#ifndef __inttypes_AMOS_HH
00011 #define __inttypes_AMOS_HH 1
00012
00013
#if HAVE_CONFIG_H
00014
# include "config.h"
00015
#endif
00016
00017
#include <inttypes.h>
00018
#include <limits.h>
00019
#include <string>
00020
00021
00022
namespace AMOS {
00023
00024 typedef uint32_t
ID_t;
00025 typedef uint32_t
NCode_t;
00026 typedef uint32_t
SD_t;
00027 typedef int32_t
Size_t;
00028 typedef Size_t Pos_t;
00029 typedef char Status_t;
00030
00031 const uint8_t
NCODE_SIZE = 3;
00032 const NCode_t NULL_NCODE = 0;
00033 const ID_t NULL_ID = 0;
00034 const Status_t NULL_STATUS = 0;
00035 const char MIN_QUALITY =
'0';
00036 const char MAX_QUALITY =
'0' + 63;
00037 const char NULL_CHAR =
'\0';
00038 const char NL_CHAR =
'\n';
00039 const std::string
NULL_STRING = &
NULL_CHAR;
00040
00041 const ID_t MAX_ID = ~((uint32_t)0);
00042 const Size_t MAX_SIZE = ~((uint32_t)0) >> 1;
00043 const Pos_t MAX_POS = ~((uint32_t)0) >> 1;
00044
00045
00046
00052 inline char Qual2Char (uint8_t qual)
00053 {
00054
return qual +
MIN_QUALITY;
00055 }
00056
00057
00058
00064 inline uint8_t
Char2Qual (
char qual)
00065 {
00066
return qual -
MIN_QUALITY;
00067 }
00068
00069
00070
00076 inline std::string
Decode (
NCode_t ncode)
00077 {
00078
char buff[4] = {ncode & CHAR_MAX, ncode >> CHAR_BIT & CHAR_MAX,
00079 ncode >> CHAR_BIT >> CHAR_BIT & CHAR_MAX,
'\0'};
00080
return buff;
00081 }
00082
00083
00084
00091 inline NCode_t Encode (
const std::string & str)
00092 {
00093
return (((str[2] << CHAR_BIT) | str[1]) << CHAR_BIT) | str[0];
00094 }
00095
00096
00097
00103
00104 struct BankFlags_t
00105 {
00106
00107
00108
#ifdef BITFIELDS_HTOL
00109
uint8_t
nibble : 4;
00110 uint8_t
is_flagB : 1;
00111 uint8_t
is_flagA : 1;
00112 uint8_t
is_modified : 1;
00113 uint8_t
is_removed : 1;
00114
#else
00115 uint8_t
is_removed : 1;
00116 uint8_t
is_modified : 1;
00117 uint8_t
is_flagA : 1;
00118 uint8_t
is_flagB : 1;
00119 uint8_t
nibble : 4;
00120
#endif
00121
00122
00127 BankFlags_t ( )
00128 {
00129
clear( );
00130 }
00131
00132
00133
00136 ~BankFlags_t ( )
00137 {
00138
00139 }
00140
00141
00142
00145 void clear ( )
00146 {
00147
is_removed =
is_modified =
is_flagA =
is_flagB = 0;
nibble = 0;
00148 }
00149 };
00150
00151
00152 #define swap16(x) \
00153
((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
00154
00155
00156
#define swap32(x) \
00157
((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) \
00158 | (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))
00159
00160
00161
#define swap64(x) \
00162
((((x) & 0xff00000000000000ull) >> 56) \
00163
| (((x) & 0x00ff000000000000ull) >> 40) \
00164
| (((x) & 0x0000ff0000000000ull) >> 24) \
00165
| (((x) & 0x000000ff00000000ull) >> 8) \
00166 | (((x) & 0x00000000ff000000ull) << 8) \
00167
| (((x) & 0x0000000000ff0000ull) << 24) \
00168
| (((x) & 0x000000000000ff00ull) << 40) \
00169
| (((x) & 0x00000000000000ffull) << 56))
00170
00171
00172
00173
00174
#ifdef WORDS_BIGENDIAN
00175
# define htol16(x) swap16(x)
00176
# define htol32(x) swap32(x)
00177
# define htol64(x) swap64(x)
00178
# define ltoh16(x) swap16(x)
00179
# define ltoh32(x) swap32(x)
00180
# define ltoh64(x) swap64(x)
00181
#else
00182
# define htol16(x) (x)
00183
# define htol32(x) (x)
00184
# define htol64(x) (x)
00185
# define ltoh16(x) (x)
00186
# define ltoh32(x) (x)
00187
# define ltoh64(x) (x)
00188
#endif
00189
00190
00191
#ifdef WORDS_BIGENDIAN
00192
# define htob16(x) (x)
00193
# define htob32(x) (x)
00194
# define htob64(x) (x)
00195
# define btoh16(x) (x)
00196 # define btoh32(x) (x)
00197 # define btoh64(x) (x)
00198 #else
00199 # define htob16(x) swap16(x)
00200 # define htob32(x) swap32(x)
00201 # define htob64(x) swap64(x)
00202
# define btoh16(x) swap16(x)
00203
# define btoh32(x) swap32(x)
00204
# define btoh64(x) swap64(x)
00205
#endif
00206
00207 }
00208
00209
#endif // #ifndef __inttypes_AMOS_HH