isomorfeus-ferret 0.17.2 → 0.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/isomorfeus_ferret_ext/benchmark.c +9 -20
- data/ext/isomorfeus_ferret_ext/benchmarks_all.h +1 -2
- data/ext/isomorfeus_ferret_ext/bm_hash.c +1 -2
- data/ext/isomorfeus_ferret_ext/brotli_dec_decode.c +4 -2
- data/ext/isomorfeus_ferret_ext/brotli_enc_encode.c +3 -2
- data/ext/isomorfeus_ferret_ext/frb_analysis.c +4 -5
- data/ext/isomorfeus_ferret_ext/frb_field_info.c +3 -4
- data/ext/isomorfeus_ferret_ext/frb_index.c +118 -125
- data/ext/isomorfeus_ferret_ext/frb_lazy_doc.c +14 -16
- data/ext/isomorfeus_ferret_ext/frb_search.c +31 -23
- data/ext/isomorfeus_ferret_ext/frb_store.c +27 -13
- data/ext/isomorfeus_ferret_ext/frb_utils.c +3 -6
- data/ext/isomorfeus_ferret_ext/frt_analysis.c +39 -46
- data/ext/isomorfeus_ferret_ext/frt_analysis.h +9 -9
- data/ext/isomorfeus_ferret_ext/frt_array.c +11 -22
- data/ext/isomorfeus_ferret_ext/frt_bitvector.h +3 -6
- data/ext/isomorfeus_ferret_ext/frt_doc_field.c +87 -0
- data/ext/isomorfeus_ferret_ext/frt_doc_field.h +26 -0
- data/ext/isomorfeus_ferret_ext/frt_document.c +4 -97
- data/ext/isomorfeus_ferret_ext/frt_document.h +2 -27
- data/ext/isomorfeus_ferret_ext/frt_except.c +8 -6
- data/ext/isomorfeus_ferret_ext/frt_except.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_field_index.c +13 -32
- data/ext/isomorfeus_ferret_ext/frt_field_index.h +0 -6
- data/ext/isomorfeus_ferret_ext/frt_field_info.c +69 -0
- data/ext/isomorfeus_ferret_ext/frt_field_info.h +49 -0
- data/ext/isomorfeus_ferret_ext/frt_field_infos.c +196 -0
- data/ext/isomorfeus_ferret_ext/frt_field_infos.h +35 -0
- data/ext/isomorfeus_ferret_ext/frt_global.c +10 -4
- data/ext/isomorfeus_ferret_ext/frt_global.h +11 -15
- data/ext/isomorfeus_ferret_ext/frt_hash.c +8 -8
- data/ext/isomorfeus_ferret_ext/frt_hash.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_hashset.c +20 -40
- data/ext/isomorfeus_ferret_ext/frt_hashset.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_helper.c +7 -15
- data/ext/isomorfeus_ferret_ext/frt_in_stream.c +35 -45
- data/ext/isomorfeus_ferret_ext/frt_in_stream.h +3 -2
- data/ext/isomorfeus_ferret_ext/frt_ind.c +20 -38
- data/ext/isomorfeus_ferret_ext/frt_index.c +292 -790
- data/ext/isomorfeus_ferret_ext/frt_index.h +1 -102
- data/ext/isomorfeus_ferret_ext/frt_lang.c +5 -10
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc.c +3 -3
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc.h +1 -1
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.c +18 -25
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.h +5 -5
- data/ext/isomorfeus_ferret_ext/frt_mdbx_store.c +102 -70
- data/ext/isomorfeus_ferret_ext/frt_mempool.c +8 -16
- data/ext/isomorfeus_ferret_ext/frt_multimapper.c +23 -46
- data/ext/isomorfeus_ferret_ext/frt_multimapper.h +4 -8
- data/ext/isomorfeus_ferret_ext/frt_out_stream.c +31 -43
- data/ext/isomorfeus_ferret_ext/frt_out_stream.h +2 -2
- data/ext/isomorfeus_ferret_ext/frt_posh.c +6 -819
- data/ext/isomorfeus_ferret_ext/frt_posh.h +0 -57
- data/ext/isomorfeus_ferret_ext/frt_priorityqueue.c +11 -22
- data/ext/isomorfeus_ferret_ext/frt_priorityqueue.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +85 -171
- data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +8 -16
- data/ext/isomorfeus_ferret_ext/frt_q_multi_term.c +1 -2
- data/ext/isomorfeus_ferret_ext/frt_q_parser.c +49 -98
- data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +52 -104
- data/ext/isomorfeus_ferret_ext/frt_q_range.c +6 -12
- data/ext/isomorfeus_ferret_ext/frt_q_span.c +113 -226
- data/ext/isomorfeus_ferret_ext/frt_q_wildcard.c +1 -2
- data/ext/isomorfeus_ferret_ext/frt_ram_store.c +134 -85
- data/ext/isomorfeus_ferret_ext/frt_search.c +82 -164
- data/ext/isomorfeus_ferret_ext/frt_similarity.c +11 -22
- data/ext/isomorfeus_ferret_ext/frt_similarity.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_store.c +13 -25
- data/ext/isomorfeus_ferret_ext/frt_store.h +86 -52
- data/ext/isomorfeus_ferret_ext/frt_term_vectors.c +8 -16
- data/ext/isomorfeus_ferret_ext/frt_win32.h +5 -10
- data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +12 -11
- data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.h +11 -13
- data/ext/isomorfeus_ferret_ext/lz4.c +422 -195
- data/ext/isomorfeus_ferret_ext/lz4.h +114 -46
- data/ext/isomorfeus_ferret_ext/lz4frame.c +421 -242
- data/ext/isomorfeus_ferret_ext/lz4frame.h +122 -53
- data/ext/isomorfeus_ferret_ext/lz4hc.c +127 -111
- data/ext/isomorfeus_ferret_ext/lz4hc.h +14 -14
- data/ext/isomorfeus_ferret_ext/lz4xxhash.h +1 -1
- data/ext/isomorfeus_ferret_ext/mdbx.c +3762 -2526
- data/ext/isomorfeus_ferret_ext/mdbx.h +115 -70
- data/ext/isomorfeus_ferret_ext/test.c +40 -87
- data/ext/isomorfeus_ferret_ext/test.h +3 -6
- data/ext/isomorfeus_ferret_ext/test_1710.c +11 -13
- data/ext/isomorfeus_ferret_ext/test_analysis.c +32 -64
- data/ext/isomorfeus_ferret_ext/test_array.c +6 -12
- data/ext/isomorfeus_ferret_ext/test_bitvector.c +12 -24
- data/ext/isomorfeus_ferret_ext/test_document.c +23 -33
- data/ext/isomorfeus_ferret_ext/test_except.c +10 -21
- data/ext/isomorfeus_ferret_ext/test_fields.c +62 -68
- data/ext/isomorfeus_ferret_ext/test_file_deleter.c +15 -23
- data/ext/isomorfeus_ferret_ext/test_filter.c +17 -27
- data/ext/isomorfeus_ferret_ext/test_global.c +14 -29
- data/ext/isomorfeus_ferret_ext/test_hash.c +19 -38
- data/ext/isomorfeus_ferret_ext/test_hashset.c +8 -16
- data/ext/isomorfeus_ferret_ext/test_helper.c +4 -8
- data/ext/isomorfeus_ferret_ext/test_highlighter.c +16 -28
- data/ext/isomorfeus_ferret_ext/test_index.c +277 -487
- data/ext/isomorfeus_ferret_ext/test_lang.c +7 -14
- data/ext/isomorfeus_ferret_ext/test_mdbx_store.c +2 -5
- data/ext/isomorfeus_ferret_ext/test_mempool.c +5 -10
- data/ext/isomorfeus_ferret_ext/test_multimapper.c +3 -6
- data/ext/isomorfeus_ferret_ext/test_priorityqueue.c +9 -18
- data/ext/isomorfeus_ferret_ext/test_q_const_score.c +4 -6
- data/ext/isomorfeus_ferret_ext/test_q_filtered.c +3 -4
- data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +9 -15
- data/ext/isomorfeus_ferret_ext/test_q_parser.c +8 -16
- data/ext/isomorfeus_ferret_ext/test_q_span.c +19 -35
- data/ext/isomorfeus_ferret_ext/test_ram_store.c +14 -13
- data/ext/isomorfeus_ferret_ext/test_search.c +60 -109
- data/ext/isomorfeus_ferret_ext/test_segments.c +8 -13
- data/ext/isomorfeus_ferret_ext/test_similarity.c +2 -4
- data/ext/isomorfeus_ferret_ext/test_sort.c +14 -24
- data/ext/isomorfeus_ferret_ext/test_store.c +96 -115
- data/ext/isomorfeus_ferret_ext/test_term.c +9 -15
- data/ext/isomorfeus_ferret_ext/test_term_vectors.c +9 -14
- data/ext/isomorfeus_ferret_ext/test_test.c +4 -8
- data/ext/isomorfeus_ferret_ext/test_threading.c +14 -20
- data/ext/isomorfeus_ferret_ext/testhelper.c +11 -21
- data/ext/isomorfeus_ferret_ext/testhelper.h +1 -1
- data/ext/isomorfeus_ferret_ext/tests_all.h +1 -2
- data/lib/isomorfeus/ferret/index/index.rb +1 -1
- data/lib/isomorfeus/ferret/version.rb +1 -1
- metadata +24 -4
@@ -81,200 +81,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
81
81
|
# define FOREIGN64 POSH_LittleU64
|
82
82
|
#endif /* POSH_LITTLE_ENDIAN */
|
83
83
|
|
84
|
-
static
|
85
|
-
int
|
86
|
-
s_testBigEndian( void )
|
87
|
-
{
|
88
|
-
union
|
89
|
-
{
|
90
|
-
posh_byte_t c[ 4 ];
|
91
|
-
posh_u32_t i;
|
92
|
-
} u;
|
93
|
-
|
94
|
-
u.i= 1;
|
95
|
-
|
96
|
-
if ( u.c[ 0 ] == 1 )
|
97
|
-
{
|
98
|
-
return 0;
|
99
|
-
}
|
100
|
-
return 1;
|
101
|
-
}
|
102
|
-
|
103
|
-
static
|
104
|
-
const char *
|
105
|
-
s_testSerialization( void )
|
106
|
-
{
|
107
|
-
posh_byte_t serbuf[ 8 ];
|
108
|
-
posh_u16_t tmp16;
|
109
|
-
posh_u32_t tmp32;
|
110
|
-
|
111
|
-
/* 16-bit serialization */
|
112
|
-
POSH_WriteU16ToLittle( serbuf, 0xABCD );
|
113
|
-
if ( ( tmp16 = POSH_ReadU16FromLittle( serbuf ) ) != 0xABCD )
|
114
|
-
{
|
115
|
-
return "*ERROR: failed little-endian 16-bit serialization test";
|
116
|
-
}
|
117
|
-
|
118
|
-
POSH_WriteU16ToBig( serbuf, 0xABCD );
|
119
|
-
if ( ( tmp16 = POSH_ReadU16FromBig( serbuf ) ) != 0xABCD )
|
120
|
-
{
|
121
|
-
return "*ERROR: failed big-endian 16-bit serialization test";
|
122
|
-
}
|
123
|
-
|
124
|
-
/* 32-bit serialization */
|
125
|
-
POSH_WriteU32ToLittle( serbuf, 0xABCD1234L );
|
126
|
-
if ( ( tmp32 = POSH_ReadU32FromLittle( serbuf ) ) != 0xABCD1234 )
|
127
|
-
{
|
128
|
-
return "*ERROR: failed little-endian 32-bit serialization test";
|
129
|
-
}
|
130
|
-
|
131
|
-
POSH_WriteU32ToBig( serbuf, 0xABCD1234L );
|
132
|
-
if ( ( tmp32 = POSH_ReadU32FromBig( serbuf ) ) != 0xABCD1234 )
|
133
|
-
{
|
134
|
-
return "*ERROR: failed big-endian 32-bit serialization test";
|
135
|
-
}
|
136
|
-
|
137
|
-
#if defined POSH_64BIT_INTEGER
|
138
|
-
{
|
139
|
-
#define REF64 POSH_U64(0xFEDCBA9876543210)
|
140
|
-
|
141
|
-
posh_u64_t tmp64;
|
142
|
-
|
143
|
-
POSH_WriteU64ToLittle( serbuf, REF64 );
|
144
|
-
|
145
|
-
if ( ( tmp64 = POSH_ReadU64FromLittle( serbuf ) ) != REF64 )
|
146
|
-
{
|
147
|
-
return "*ERROR: failed little-endian 64-bit serialization test";
|
148
|
-
}
|
149
|
-
|
150
|
-
POSH_WriteU64ToBig( serbuf, REF64 );
|
151
|
-
|
152
|
-
if ( ( tmp64 = POSH_ReadU64FromBig( serbuf ) ) != REF64 )
|
153
|
-
{
|
154
|
-
return "*ERROR: failed big-endian 64-bit serialization test";
|
155
|
-
}
|
156
|
-
}
|
157
|
-
#endif
|
158
|
-
|
159
|
-
return 0;
|
160
|
-
}
|
161
|
-
|
162
|
-
#if !defined POSH_NO_FLOAT
|
163
|
-
static
|
164
|
-
const char *
|
165
|
-
s_testFloatingPoint( void )
|
166
|
-
{
|
167
|
-
float fRef = 10.0f/30.0f;
|
168
|
-
double dRef = 10.0/30.0;
|
169
|
-
posh_byte_t dbuf[ 8 ];
|
170
|
-
float fTmp;
|
171
|
-
double dTmp;
|
172
|
-
|
173
|
-
fTmp = POSH_FloatFromLittleBits( POSH_LittleFloatBits( fRef ) );
|
174
|
-
|
175
|
-
if ( fTmp != fRef )
|
176
|
-
{
|
177
|
-
return "*ERROR: POSH little endian floating point conversion failed. Please report this to poshlib@poshlib.org!\n";
|
178
|
-
}
|
179
|
-
|
180
|
-
fTmp = POSH_FloatFromBigBits( POSH_BigFloatBits( fRef ) );
|
181
|
-
if ( fTmp != fRef )
|
182
|
-
{
|
183
|
-
return "*ERROR: POSH big endian floating point conversion failed. Please report this to poshlib@poshlib.org!\n";
|
184
|
-
}
|
185
|
-
|
186
|
-
POSH_DoubleBits( dRef, dbuf );
|
187
|
-
|
188
|
-
dTmp = POSH_DoubleFromBits( dbuf );
|
189
|
-
|
190
|
-
if ( dTmp != dRef )
|
191
|
-
{
|
192
|
-
return "*ERROR: POSH double precision floating point serialization failed. Please report this to poshlib@poshlib.org!\n";
|
193
|
-
}
|
194
|
-
|
195
|
-
return 0;
|
196
|
-
}
|
197
|
-
#endif /* !defined POSH_NO_FLOAT */
|
198
|
-
|
199
|
-
static
|
200
|
-
const char *
|
201
|
-
s_testEndianess( void )
|
202
|
-
{
|
203
|
-
/* check endianess */
|
204
|
-
if ( s_testBigEndian() != IS_BIG_ENDIAN )
|
205
|
-
{
|
206
|
-
return "*ERROR: POSH compile time endianess does not match run-time endianess verification. Please report this to poshlib@poshlib.org!\n";
|
207
|
-
}
|
208
|
-
|
209
|
-
/* make sure our endian swap routines work */
|
210
|
-
if ( ( NATIVE32( 0x11223344L ) != 0x11223344L ) ||
|
211
|
-
( FOREIGN32( 0x11223344L ) != 0x44332211L ) ||
|
212
|
-
( NATIVE16( 0x1234 ) != 0x1234 ) ||
|
213
|
-
( FOREIGN16( 0x1234 ) != 0x3412 ) )
|
214
|
-
{
|
215
|
-
return "*ERROR: POSH endianess macro selection failed. Please report this to poshlib@poshlib.org!\n";
|
216
|
-
}
|
217
|
-
|
218
|
-
/* test serialization routines */
|
219
|
-
|
220
|
-
return 0;
|
221
|
-
}
|
222
84
|
#endif /* !defined FORCE_DOXYGEN */
|
223
85
|
|
224
|
-
/**
|
225
|
-
Returns a string describing this platform's basic attributes.
|
226
|
-
|
227
|
-
POSH_GetArchString() reports on an architecture's statically determined
|
228
|
-
attributes. In addition, it will perform run-time verification checks
|
229
|
-
to make sure the various platform specific functions work. If an error
|
230
|
-
occurs, please contact me at poshlib@poshlib.org so we can try to resolve
|
231
|
-
what the specific failure case is.
|
232
|
-
@returns a string describing this platform on success, or a string in the
|
233
|
-
form "*ERROR: [text]" on failure. You can simply check to see if
|
234
|
-
the first character returned is '*' to verify an error condition.
|
235
|
-
*/
|
236
|
-
const char *
|
237
|
-
POSH_GetArchString( void )
|
238
|
-
{
|
239
|
-
const char *err;
|
240
|
-
const char *s = "OS:.............."POSH_OS_STRING"\n"
|
241
|
-
"CPU:............."POSH_CPU_STRING"\n"
|
242
|
-
"endian:.........."POSH_ENDIAN_STRING"\n"
|
243
|
-
"ptr size:........"POSH_POINTER_STRING"\n"
|
244
|
-
"64-bit ints......"POSH_64BIT_INTEGER_STRING"\n"
|
245
|
-
"floating point..."POSH_FLOAT_STRING"\n"
|
246
|
-
"compiler........."POSH_COMPILER_STRING"\n";
|
247
|
-
|
248
|
-
/* test endianess */
|
249
|
-
err = s_testEndianess();
|
250
|
-
|
251
|
-
if ( err != 0 )
|
252
|
-
{
|
253
|
-
return err;
|
254
|
-
}
|
255
|
-
|
256
|
-
/* test serialization */
|
257
|
-
err = s_testSerialization();
|
258
|
-
|
259
|
-
if ( err != 0 )
|
260
|
-
{
|
261
|
-
return err;
|
262
|
-
}
|
263
|
-
|
264
|
-
#if !defined POSH_NO_FLOAT
|
265
|
-
/* check that our floating point support is correct */
|
266
|
-
err = s_testFloatingPoint();
|
267
|
-
|
268
|
-
if ( err != 0 )
|
269
|
-
{
|
270
|
-
return err;
|
271
|
-
}
|
272
|
-
|
273
|
-
#endif
|
274
|
-
|
275
|
-
return s;
|
276
|
-
}
|
277
|
-
|
278
86
|
/* ---------------------------------------------------------------------------*/
|
279
87
|
/* BYTE SWAPPING SUPPORT */
|
280
88
|
/* ---------------------------------------------------------------------------*/
|
@@ -286,8 +94,7 @@ POSH_GetArchString( void )
|
|
286
94
|
@returns a byte swapped version of v
|
287
95
|
*/
|
288
96
|
posh_u16_t
|
289
|
-
POSH_SwapU16( posh_u16_t v )
|
290
|
-
{
|
97
|
+
POSH_SwapU16( posh_u16_t v ) {
|
291
98
|
posh_u16_t swapped;
|
292
99
|
|
293
100
|
swapped = v << 8;
|
@@ -307,8 +114,7 @@ POSH_SwapU16( posh_u16_t v )
|
|
307
114
|
avoid signed/unsigned mismatch compiler warnings.
|
308
115
|
*/
|
309
116
|
posh_i16_t
|
310
|
-
POSH_SwapI16( posh_i16_t v )
|
311
|
-
{
|
117
|
+
POSH_SwapI16( posh_i16_t v ) {
|
312
118
|
return ( posh_i16_t ) POSH_SwapU16( v );
|
313
119
|
}
|
314
120
|
|
@@ -320,8 +126,7 @@ POSH_SwapI16( posh_i16_t v )
|
|
320
126
|
@returns a byte swapped version of v
|
321
127
|
*/
|
322
128
|
posh_u32_t
|
323
|
-
POSH_SwapU32( posh_u32_t v )
|
324
|
-
{
|
129
|
+
POSH_SwapU32( posh_u32_t v ) {
|
325
130
|
posh_u32_t swapped;
|
326
131
|
|
327
132
|
swapped = ( v & 0xFF ) << 24;
|
@@ -343,8 +148,7 @@ POSH_SwapU32( posh_u32_t v )
|
|
343
148
|
avoid signed/unsigned mismatch compiler warnings.
|
344
149
|
*/
|
345
150
|
posh_i32_t
|
346
|
-
POSH_SwapI32( posh_i32_t v )
|
347
|
-
{
|
151
|
+
POSH_SwapI32( posh_i32_t v ) {
|
348
152
|
return ( posh_i32_t ) POSH_SwapU32( ( posh_u32_t ) v );
|
349
153
|
}
|
350
154
|
|
@@ -357,8 +161,7 @@ POSH_SwapI32( posh_i32_t v )
|
|
357
161
|
@returns a byte swapped version of v
|
358
162
|
*/
|
359
163
|
posh_u64_t
|
360
|
-
POSH_SwapU64( posh_u64_t v )
|
361
|
-
{
|
164
|
+
POSH_SwapU64( posh_u64_t v ) {
|
362
165
|
posh_byte_t tmp;
|
363
166
|
union {
|
364
167
|
posh_byte_t bytes[ 8 ];
|
@@ -383,624 +186,8 @@ POSH_SwapU64( posh_u64_t v )
|
|
383
186
|
@returns a byte swapped version of v
|
384
187
|
*/
|
385
188
|
posh_i64_t
|
386
|
-
POSH_SwapI64( posh_i64_t v )
|
387
|
-
{
|
189
|
+
POSH_SwapI64( posh_i64_t v ) {
|
388
190
|
return ( posh_i64_t ) POSH_SwapU64( ( posh_u64_t ) v );
|
389
191
|
}
|
390
192
|
|
391
193
|
#endif /* defined POSH_64BIT_INTEGER */
|
392
|
-
|
393
|
-
/* ---------------------------------------------------------------------------*/
|
394
|
-
/* IN-MEMORY SERIALIZATION */
|
395
|
-
/* ---------------------------------------------------------------------------*/
|
396
|
-
|
397
|
-
/**
|
398
|
-
* Writes an unsigned 16-bit value to a little endian buffer
|
399
|
-
|
400
|
-
@ingroup MemoryBuffer
|
401
|
-
@param dst [out] pointer to the destination buffer, may not be NULL. Alignment doesn't matter.
|
402
|
-
@param value [in] host-endian unsigned 16-bit value
|
403
|
-
@returns a pointer to the location two bytes after dst
|
404
|
-
@remarks does no validation of the inputs
|
405
|
-
*/
|
406
|
-
posh_u16_t *
|
407
|
-
POSH_WriteU16ToLittle( void *dst, posh_u16_t value )
|
408
|
-
{
|
409
|
-
posh_u16_t *p16 = ( posh_u16_t * ) dst;
|
410
|
-
posh_byte_t *p = ( posh_byte_t * ) dst;
|
411
|
-
|
412
|
-
p[ 0 ] = value & 0xFF;
|
413
|
-
p[ 1 ] = ( value & 0xFF00) >> 8;
|
414
|
-
|
415
|
-
return p16 + 1;
|
416
|
-
}
|
417
|
-
|
418
|
-
/**
|
419
|
-
* Writes a signed 16-bit value to a little endian buffer
|
420
|
-
|
421
|
-
@ingroup MemoryBuffer
|
422
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
423
|
-
@param value [in] host-endian signed 16-bit value
|
424
|
-
@returns a pointer to the location two bytes after dst
|
425
|
-
@remarks does no validation of the inputs. This simply calls
|
426
|
-
POSH_WriteU16ToLittle() with appropriate casting.
|
427
|
-
*/
|
428
|
-
posh_i16_t *
|
429
|
-
POSH_WriteI16ToLittle( void *dst, posh_i16_t value )
|
430
|
-
{
|
431
|
-
return ( posh_i16_t * ) POSH_WriteU16ToLittle( dst, ( posh_u16_t ) value );
|
432
|
-
}
|
433
|
-
|
434
|
-
/**
|
435
|
-
* Writes an unsigned 32-bit value to a little endian buffer
|
436
|
-
|
437
|
-
@ingroup MemoryBuffer
|
438
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
439
|
-
@param value [in] host-endian signed 32-bit value
|
440
|
-
@returns a pointer to the location four bytes after dst
|
441
|
-
@remarks does no validation of the inputs.
|
442
|
-
*/
|
443
|
-
posh_u32_t *
|
444
|
-
POSH_WriteU32ToLittle( void *dst, posh_u32_t value )
|
445
|
-
{
|
446
|
-
posh_u32_t *p32 = ( posh_u32_t * ) dst;
|
447
|
-
posh_byte_t *p = ( posh_byte_t * ) dst;
|
448
|
-
|
449
|
-
p[ 0 ] = ( value & 0xFF );
|
450
|
-
p[ 1 ] = ( value & 0xFF00 ) >> 8;
|
451
|
-
p[ 2 ] = ( value & 0xFF0000 ) >> 16;
|
452
|
-
p[ 3 ] = ( value & 0xFF000000 ) >> 24;
|
453
|
-
|
454
|
-
return p32 + 1;
|
455
|
-
}
|
456
|
-
|
457
|
-
/**
|
458
|
-
* Writes a signed 32-bit value to a little endian buffer
|
459
|
-
|
460
|
-
@ingroup MemoryBuffer
|
461
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
462
|
-
@param value [in] host-endian signed 32-bit value
|
463
|
-
@returns a pointer to the location four bytes after dst
|
464
|
-
@remarks does no validation of the inputs. This simply calls
|
465
|
-
POSH_WriteU32ToLittle() with appropriate casting.
|
466
|
-
*/
|
467
|
-
posh_i32_t *
|
468
|
-
POSH_WriteI32ToLittle( void *dst, posh_i32_t value )
|
469
|
-
{
|
470
|
-
return ( posh_i32_t * ) POSH_WriteU32ToLittle( dst, ( posh_u32_t ) value );
|
471
|
-
}
|
472
|
-
|
473
|
-
/**
|
474
|
-
* Writes an unsigned 16-bit value to a big endian buffer
|
475
|
-
|
476
|
-
@ingroup MemoryBuffer
|
477
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
478
|
-
@param value [in] host-endian unsigned 16-bit value
|
479
|
-
@returns a pointer to the location two bytes after dst
|
480
|
-
@remarks does no validation of the inputs
|
481
|
-
*/
|
482
|
-
posh_u16_t *
|
483
|
-
POSH_WriteU16ToBig( void *dst, posh_u16_t value )
|
484
|
-
{
|
485
|
-
posh_u16_t *p16 = ( posh_u16_t * ) dst;
|
486
|
-
posh_byte_t *p = ( posh_byte_t * ) dst;
|
487
|
-
|
488
|
-
p[ 1 ] = ( value & 0xFF );
|
489
|
-
p[ 0 ] = ( value & 0xFF00 ) >> 8;
|
490
|
-
|
491
|
-
return p16 + 1;
|
492
|
-
}
|
493
|
-
|
494
|
-
/**
|
495
|
-
* Writes a signed 16-bit value to a big endian buffer
|
496
|
-
|
497
|
-
@ingroup MemoryBuffer
|
498
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
499
|
-
@param value [in] host-endian signed 16-bit value
|
500
|
-
@returns a pointer to the location two bytes after dst
|
501
|
-
@remarks does no validation of the inputs. This simply calls
|
502
|
-
POSH_WriteU16ToLittle() with appropriate casting.
|
503
|
-
*/
|
504
|
-
posh_i16_t *
|
505
|
-
POSH_WriteI16ToBig( void *dst, posh_i16_t value )
|
506
|
-
{
|
507
|
-
return ( posh_i16_t * ) POSH_WriteU16ToBig( dst, ( posh_u16_t ) value );
|
508
|
-
}
|
509
|
-
|
510
|
-
/**
|
511
|
-
* Writes an unsigned 32-bit value to a big endian buffer
|
512
|
-
|
513
|
-
@ingroup MemoryBuffer
|
514
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
515
|
-
@param value [in] host-endian unsigned 32-bit value
|
516
|
-
@returns a pointer to the location four bytes after dst
|
517
|
-
@remarks does no validation of the inputs.
|
518
|
-
*/
|
519
|
-
posh_u32_t *
|
520
|
-
POSH_WriteU32ToBig( void *dst, posh_u32_t value )
|
521
|
-
{
|
522
|
-
posh_u32_t *p32 = ( posh_u32_t * ) dst;
|
523
|
-
posh_byte_t *p = ( posh_byte_t * ) dst;
|
524
|
-
|
525
|
-
p[ 3 ] = ( value & 0xFF );
|
526
|
-
p[ 2 ] = ( value & 0xFF00 ) >> 8;
|
527
|
-
p[ 1 ] = ( value & 0xFF0000 ) >> 16;
|
528
|
-
p[ 0 ] = ( value & 0xFF000000 ) >> 24;
|
529
|
-
|
530
|
-
return p32 + 1;
|
531
|
-
}
|
532
|
-
|
533
|
-
/**
|
534
|
-
* Writes a signed 32-bit value to a big endian buffer
|
535
|
-
|
536
|
-
@ingroup MemoryBuffer
|
537
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
538
|
-
@param value [in] host-endian signed 32-bit value
|
539
|
-
@returns a pointer to the location four bytes after dst
|
540
|
-
@remarks does no validation of the inputs. This simply calls
|
541
|
-
POSH_WriteU32ToBig() with appropriate casting.
|
542
|
-
*/
|
543
|
-
posh_i32_t *
|
544
|
-
POSH_WriteI32ToBig( void *dst, posh_i32_t value )
|
545
|
-
{
|
546
|
-
return ( posh_i32_t * ) POSH_WriteU32ToBig( dst, ( posh_u32_t ) value );
|
547
|
-
}
|
548
|
-
|
549
|
-
#if defined POSH_64BIT_INTEGER
|
550
|
-
/**
|
551
|
-
* Writes an unsigned 64-bit value to a little-endian buffer
|
552
|
-
|
553
|
-
@ingroup SixtyFourBit
|
554
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
555
|
-
@param value [in] host-endian unsigned 64-bit value
|
556
|
-
@returns a pointer to the location eight bytes after dst
|
557
|
-
@remarks does no validation of the inputs.
|
558
|
-
*/
|
559
|
-
posh_u64_t *
|
560
|
-
POSH_WriteU64ToLittle( void *dst, posh_u64_t value )
|
561
|
-
{
|
562
|
-
posh_u64_t *p64 = ( posh_u64_t * ) dst;
|
563
|
-
posh_byte_t *p = ( posh_byte_t * ) dst;
|
564
|
-
int i;
|
565
|
-
|
566
|
-
for ( i = 0; i < 8; i++, value >>= 8 )
|
567
|
-
{
|
568
|
-
p[ i ] = ( posh_byte_t ) ( value & 0xFF );
|
569
|
-
}
|
570
|
-
|
571
|
-
return p64 + 1;
|
572
|
-
}
|
573
|
-
|
574
|
-
/**
|
575
|
-
* Writes a signed 64-bit value to a little-endian buffer
|
576
|
-
|
577
|
-
@ingroup SixtyFourBit
|
578
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
579
|
-
@param value [in] host-endian unsigned 64-bit value
|
580
|
-
@returns a pointer to the location eight bytes after dst
|
581
|
-
@remarks does no validation of the inputs.
|
582
|
-
*/
|
583
|
-
posh_i64_t *
|
584
|
-
POSH_WriteI64ToLittle( void *dst, posh_i64_t value )
|
585
|
-
{
|
586
|
-
return ( posh_i64_t * ) POSH_WriteU64ToLittle( dst, ( posh_u64_t ) value );
|
587
|
-
}
|
588
|
-
|
589
|
-
/**
|
590
|
-
* Writes an unsigned 64-bit value to a big-endian buffer
|
591
|
-
|
592
|
-
@ingroup SixtyFourBit
|
593
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
594
|
-
@param value [in] host-endian unsigned 64-bit value
|
595
|
-
@returns a pointer to the location eight bytes after dst
|
596
|
-
@remarks does no validation of the inputs.
|
597
|
-
*/
|
598
|
-
posh_u64_t *
|
599
|
-
POSH_WriteU64ToBig( void *dst, posh_u64_t value )
|
600
|
-
{
|
601
|
-
posh_u64_t *p64 = ( posh_u64_t * ) dst;
|
602
|
-
posh_byte_t *p = ( posh_byte_t * ) dst;
|
603
|
-
int i;
|
604
|
-
|
605
|
-
for ( i = 0; i < 8; i++, value >>= 8 )
|
606
|
-
{
|
607
|
-
p[ 7-i ] = ( posh_byte_t ) ( value & 0xFF );
|
608
|
-
}
|
609
|
-
|
610
|
-
return p64 + 8;
|
611
|
-
}
|
612
|
-
|
613
|
-
/**
|
614
|
-
* Writes a signed 64-bit value to a big-endian buffer
|
615
|
-
|
616
|
-
@ingroup SixtyFourBit
|
617
|
-
@param dst [out] pointer to the destination buffer, may not be NULL
|
618
|
-
@param value [in] host-endian signed 64-bit value
|
619
|
-
@returns a pointer to the location eight bytes after dst
|
620
|
-
@remarks does no validation of the inputs.
|
621
|
-
*/
|
622
|
-
posh_i64_t *
|
623
|
-
POSH_WriteI64ToBig( void *dst, posh_i64_t value )
|
624
|
-
{
|
625
|
-
return ( posh_i64_t * ) POSH_WriteU64ToBig( dst, ( posh_u64_t ) value );
|
626
|
-
}
|
627
|
-
|
628
|
-
#endif /* POSH_64BIT_INTEGER */
|
629
|
-
|
630
|
-
/* ---------------------------------------------------------------------------*/
|
631
|
-
/* IN-MEMORY DESERIALIZATION */
|
632
|
-
/* ---------------------------------------------------------------------------*/
|
633
|
-
|
634
|
-
/**
|
635
|
-
* Reads an unsigned 16-bit value from a little-endian buffer
|
636
|
-
@ingroup MemoryBuffer
|
637
|
-
@param src [in] source buffer
|
638
|
-
@returns host-endian unsigned 16-bit value
|
639
|
-
*/
|
640
|
-
posh_u16_t
|
641
|
-
POSH_ReadU16FromLittle( const void *src )
|
642
|
-
{
|
643
|
-
posh_u16_t v = 0;
|
644
|
-
posh_byte_t *p = ( posh_byte_t * ) src;
|
645
|
-
|
646
|
-
v |= p[ 0 ];
|
647
|
-
v |= ( ( posh_u16_t ) p[ 1 ] ) << 8;
|
648
|
-
|
649
|
-
return v;
|
650
|
-
}
|
651
|
-
|
652
|
-
/**
|
653
|
-
* Reads a signed 16-bit value from a little-endian buffer
|
654
|
-
@ingroup MemoryBuffer
|
655
|
-
@param src [in] source buffer
|
656
|
-
@returns host-endian signed 16-bit value
|
657
|
-
*/
|
658
|
-
posh_i16_t
|
659
|
-
POSH_ReadI16FromLittle( const void *src )
|
660
|
-
{
|
661
|
-
return ( posh_i16_t ) POSH_ReadU16FromLittle( src );
|
662
|
-
}
|
663
|
-
|
664
|
-
/**
|
665
|
-
* Reads an unsigned 32-bit value from a little-endian buffer
|
666
|
-
@ingroup MemoryBuffer
|
667
|
-
@param src [in] source buffer
|
668
|
-
@returns host-endian unsigned 32-bit value
|
669
|
-
*/
|
670
|
-
posh_u32_t
|
671
|
-
POSH_ReadU32FromLittle( const void *src )
|
672
|
-
{
|
673
|
-
posh_u32_t v = 0;
|
674
|
-
posh_byte_t *p = ( posh_byte_t * ) src;
|
675
|
-
|
676
|
-
v |= p[ 0 ];
|
677
|
-
v |= ( ( posh_u32_t ) p[ 1 ] ) << 8;
|
678
|
-
v |= ( ( posh_u32_t ) p[ 2 ] ) << 16;
|
679
|
-
v |= ( ( posh_u32_t ) p[ 3 ] ) << 24;
|
680
|
-
|
681
|
-
return v;
|
682
|
-
}
|
683
|
-
|
684
|
-
/**
|
685
|
-
* Reads a signed 32-bit value from a little-endian buffer
|
686
|
-
@ingroup MemoryBuffer
|
687
|
-
@param src [in] source buffer
|
688
|
-
@returns host-endian signed 32-bit value
|
689
|
-
*/
|
690
|
-
posh_i32_t
|
691
|
-
POSH_ReadI32FromLittle( const void *src )
|
692
|
-
{
|
693
|
-
return ( posh_i32_t ) POSH_ReadU32FromLittle( src );
|
694
|
-
}
|
695
|
-
|
696
|
-
|
697
|
-
/**
|
698
|
-
* Reads an unsigned 16-bit value from a big-endian buffer
|
699
|
-
@ingroup MemoryBuffer
|
700
|
-
@param src [in] source buffer
|
701
|
-
@returns host-endian unsigned 16-bit value
|
702
|
-
*/
|
703
|
-
posh_u16_t
|
704
|
-
POSH_ReadU16FromBig( const void *src )
|
705
|
-
{
|
706
|
-
posh_u16_t v = 0;
|
707
|
-
posh_byte_t *p = ( posh_byte_t * ) src;
|
708
|
-
|
709
|
-
v |= p[ 1 ];
|
710
|
-
v |= ( ( posh_u16_t ) p[ 0 ] ) << 8;
|
711
|
-
|
712
|
-
return v;
|
713
|
-
}
|
714
|
-
|
715
|
-
/**
|
716
|
-
* Reads a signed 16-bit value from a big-endian buffer
|
717
|
-
@ingroup MemoryBuffer
|
718
|
-
@param src [in] source buffer
|
719
|
-
@returns host-endian signed 16-bit value
|
720
|
-
*/
|
721
|
-
posh_i16_t
|
722
|
-
POSH_ReadI16FromBig( const void *src )
|
723
|
-
{
|
724
|
-
return ( posh_i16_t ) POSH_ReadU16FromBig( src );
|
725
|
-
}
|
726
|
-
|
727
|
-
/**
|
728
|
-
* Reads an unsigned 32-bit value from a big-endian buffer
|
729
|
-
@ingroup MemoryBuffer
|
730
|
-
@param src [in] source buffer
|
731
|
-
@returns host-endian unsigned 32-bit value
|
732
|
-
*/
|
733
|
-
posh_u32_t
|
734
|
-
POSH_ReadU32FromBig( const void *src )
|
735
|
-
{
|
736
|
-
posh_u32_t v = 0;
|
737
|
-
posh_byte_t *p = ( posh_byte_t * ) src;
|
738
|
-
|
739
|
-
v |= p[ 3 ];
|
740
|
-
v |= ( ( posh_u32_t ) p[ 2 ] ) << 8;
|
741
|
-
v |= ( ( posh_u32_t ) p[ 1 ] ) << 16;
|
742
|
-
v |= ( ( posh_u32_t ) p[ 0 ] ) << 24;
|
743
|
-
|
744
|
-
return v;
|
745
|
-
}
|
746
|
-
|
747
|
-
/**
|
748
|
-
* Reads a signed 32-bit value from a big-endian buffer
|
749
|
-
@ingroup MemoryBuffer
|
750
|
-
@param src [in] source buffer
|
751
|
-
@returns host-endian signed 32-bit value
|
752
|
-
*/
|
753
|
-
posh_i32_t
|
754
|
-
POSH_ReadI32FromBig( const void *src )
|
755
|
-
{
|
756
|
-
return POSH_BigI32( (*(const posh_i32_t*)src ) );
|
757
|
-
}
|
758
|
-
|
759
|
-
#if defined POSH_64BIT_INTEGER
|
760
|
-
|
761
|
-
/**
|
762
|
-
* Reads an unsigned 64-bit value from a little-endian buffer
|
763
|
-
@param src [in] source buffer
|
764
|
-
@returns host-endian unsigned 32-bit value
|
765
|
-
*/
|
766
|
-
posh_u64_t
|
767
|
-
POSH_ReadU64FromLittle( const void *src )
|
768
|
-
{
|
769
|
-
posh_u64_t v = 0;
|
770
|
-
posh_byte_t *p = ( posh_byte_t * ) src;
|
771
|
-
int i;
|
772
|
-
|
773
|
-
for ( i = 0; i < 8; i++ )
|
774
|
-
{
|
775
|
-
v |= ( ( posh_u64_t ) p[ i ] ) << (i*8);
|
776
|
-
}
|
777
|
-
|
778
|
-
return v;
|
779
|
-
}
|
780
|
-
|
781
|
-
/**
|
782
|
-
* Reads a signed 64-bit value from a little-endian buffer
|
783
|
-
@param src [in] source buffer
|
784
|
-
@returns host-endian signed 32-bit value
|
785
|
-
*/
|
786
|
-
posh_i64_t
|
787
|
-
POSH_ReadI64FromLittle( const void *src )
|
788
|
-
{
|
789
|
-
return ( posh_i64_t ) POSH_ReadU64FromLittle( src );
|
790
|
-
}
|
791
|
-
|
792
|
-
/**
|
793
|
-
* Reads an unsigned 64-bit value from a big-endian buffer
|
794
|
-
@param src [in] source buffer
|
795
|
-
@returns host-endian unsigned 32-bit value
|
796
|
-
*/
|
797
|
-
posh_u64_t
|
798
|
-
POSH_ReadU64FromBig( const void *src )
|
799
|
-
{
|
800
|
-
posh_u64_t v = 0;
|
801
|
-
posh_byte_t *p = ( posh_byte_t * ) src;
|
802
|
-
int i;
|
803
|
-
|
804
|
-
for ( i = 0; i < 8; i++ )
|
805
|
-
{
|
806
|
-
v |= ( ( posh_u64_t ) p[ 7-i ] ) << (i*8);
|
807
|
-
}
|
808
|
-
|
809
|
-
return v;
|
810
|
-
}
|
811
|
-
|
812
|
-
/**
|
813
|
-
* Reads an signed 64-bit value from a big-endian buffer
|
814
|
-
@param src [in] source buffer
|
815
|
-
@returns host-endian signed 32-bit value
|
816
|
-
*/
|
817
|
-
posh_i64_t
|
818
|
-
POSH_ReadI64FromBig( const void *src )
|
819
|
-
{
|
820
|
-
return ( posh_i64_t ) POSH_ReadU64FromBig( src );
|
821
|
-
}
|
822
|
-
|
823
|
-
#endif /* POSH_64BIT_INTEGER */
|
824
|
-
|
825
|
-
/* ---------------------------------------------------------------------------*/
|
826
|
-
/* FLOATING POINT SUPPORT */
|
827
|
-
/* ---------------------------------------------------------------------------*/
|
828
|
-
|
829
|
-
#if !defined POSH_NO_FLOAT
|
830
|
-
|
831
|
-
/** @ingroup FloatingPoint
|
832
|
-
@param[in] f floating point value
|
833
|
-
@returns a little-endian bit representation of f
|
834
|
-
*/
|
835
|
-
posh_u32_t
|
836
|
-
POSH_LittleFloatBits( float f )
|
837
|
-
{
|
838
|
-
union
|
839
|
-
{
|
840
|
-
float f32;
|
841
|
-
posh_u32_t u32;
|
842
|
-
} u;
|
843
|
-
|
844
|
-
u.f32 = f;
|
845
|
-
|
846
|
-
return POSH_LittleU32( u.u32 );
|
847
|
-
}
|
848
|
-
|
849
|
-
/**
|
850
|
-
* Extracts raw big-endian bits from a 32-bit floating point value
|
851
|
-
*
|
852
|
-
@ingroup FloatingPoint
|
853
|
-
@param f [in] floating point value
|
854
|
-
@returns a big-endian bit representation of f
|
855
|
-
*/
|
856
|
-
posh_u32_t
|
857
|
-
POSH_BigFloatBits( float f )
|
858
|
-
{
|
859
|
-
union
|
860
|
-
{
|
861
|
-
float f32;
|
862
|
-
posh_u32_t u32;
|
863
|
-
} u;
|
864
|
-
|
865
|
-
u.f32 = f;
|
866
|
-
|
867
|
-
return POSH_BigU32( u.u32 );
|
868
|
-
}
|
869
|
-
|
870
|
-
/**
|
871
|
-
* Extracts raw, little-endian bit representation from a 64-bit double.
|
872
|
-
*
|
873
|
-
@param d [in] 64-bit double precision value
|
874
|
-
@param dst [out] 8-byte storage buffer
|
875
|
-
@ingroup FloatingPoint
|
876
|
-
@returns the raw bits used to represent the value 'd', in the form dst[0]=LSB
|
877
|
-
*/
|
878
|
-
void
|
879
|
-
POSH_DoubleBits( double d, posh_byte_t dst[ 8 ] )
|
880
|
-
{
|
881
|
-
union
|
882
|
-
{
|
883
|
-
double d64;
|
884
|
-
posh_byte_t bytes[ 8 ];
|
885
|
-
} u;
|
886
|
-
|
887
|
-
u.d64 = d;
|
888
|
-
|
889
|
-
#if defined POSH_LITTLE_ENDIAN
|
890
|
-
dst[ 0 ] = u.bytes[ 0 ];
|
891
|
-
dst[ 1 ] = u.bytes[ 1 ];
|
892
|
-
dst[ 2 ] = u.bytes[ 2 ];
|
893
|
-
dst[ 3 ] = u.bytes[ 3 ];
|
894
|
-
dst[ 4 ] = u.bytes[ 4 ];
|
895
|
-
dst[ 5 ] = u.bytes[ 5 ];
|
896
|
-
dst[ 6 ] = u.bytes[ 6 ];
|
897
|
-
dst[ 7 ] = u.bytes[ 7 ];
|
898
|
-
#else
|
899
|
-
dst[ 0 ] = u.bytes[ 7 ];
|
900
|
-
dst[ 1 ] = u.bytes[ 6 ];
|
901
|
-
dst[ 2 ] = u.bytes[ 5 ];
|
902
|
-
dst[ 3 ] = u.bytes[ 4 ];
|
903
|
-
dst[ 4 ] = u.bytes[ 3 ];
|
904
|
-
dst[ 5 ] = u.bytes[ 2 ];
|
905
|
-
dst[ 6 ] = u.bytes[ 1 ];
|
906
|
-
dst[ 7 ] = u.bytes[ 0 ];
|
907
|
-
#endif
|
908
|
-
}
|
909
|
-
|
910
|
-
/**
|
911
|
-
* Creates a double-precision, 64-bit floating point value from a set of raw,
|
912
|
-
* little-endian bits
|
913
|
-
|
914
|
-
@ingroup FloatingPoint
|
915
|
-
@param src [in] little-endian byte representation of 64-bit double precision
|
916
|
-
floating point value
|
917
|
-
@returns double precision floating point representation of the raw bits
|
918
|
-
@remarks No error checking is performed, so there are no guarantees that the
|
919
|
-
result is a valid number, nor is there any check to ensure that src is
|
920
|
-
non-NULL. BE CAREFUL USING THIS.
|
921
|
-
*/
|
922
|
-
double
|
923
|
-
POSH_DoubleFromBits( const posh_byte_t src[ 8 ] )
|
924
|
-
{
|
925
|
-
union
|
926
|
-
{
|
927
|
-
double d64;
|
928
|
-
posh_byte_t bytes[ 8 ];
|
929
|
-
} u;
|
930
|
-
|
931
|
-
#if defined POSH_LITTLE_ENDIAN
|
932
|
-
u.bytes[ 0 ] = src[ 0 ];
|
933
|
-
u.bytes[ 1 ] = src[ 1 ];
|
934
|
-
u.bytes[ 2 ] = src[ 2 ];
|
935
|
-
u.bytes[ 3 ] = src[ 3 ];
|
936
|
-
u.bytes[ 4 ] = src[ 4 ];
|
937
|
-
u.bytes[ 5 ] = src[ 5 ];
|
938
|
-
u.bytes[ 6 ] = src[ 6 ];
|
939
|
-
u.bytes[ 7 ] = src[ 7 ];
|
940
|
-
#else
|
941
|
-
u.bytes[ 0 ] = src[ 7 ];
|
942
|
-
u.bytes[ 1 ] = src[ 6 ];
|
943
|
-
u.bytes[ 2 ] = src[ 5 ];
|
944
|
-
u.bytes[ 3 ] = src[ 4 ];
|
945
|
-
u.bytes[ 4 ] = src[ 3 ];
|
946
|
-
u.bytes[ 5 ] = src[ 2 ];
|
947
|
-
u.bytes[ 6 ] = src[ 1 ];
|
948
|
-
u.bytes[ 7 ] = src[ 0 ];
|
949
|
-
#endif
|
950
|
-
|
951
|
-
return u.d64;
|
952
|
-
}
|
953
|
-
|
954
|
-
/**
|
955
|
-
* Creates a floating point number from little endian bits
|
956
|
-
*
|
957
|
-
@ingroup FloatingPoint
|
958
|
-
@param bits [in] raw floating point bits in little-endian form
|
959
|
-
@returns a floating point number based on the given bit representation
|
960
|
-
@remarks No error checking is performed, so there are no guarantees that the
|
961
|
-
result is a valid number. BE CAREFUL USING THIS.
|
962
|
-
*/
|
963
|
-
float
|
964
|
-
POSH_FloatFromLittleBits( posh_u32_t bits )
|
965
|
-
{
|
966
|
-
union
|
967
|
-
{
|
968
|
-
float f32;
|
969
|
-
posh_u32_t u32;
|
970
|
-
} u;
|
971
|
-
|
972
|
-
u.u32 = bits;
|
973
|
-
#if defined POSH_BIG_ENDIAN
|
974
|
-
u.u32 = POSH_SwapU32( u.u32 );
|
975
|
-
#endif
|
976
|
-
|
977
|
-
return u.f32;
|
978
|
-
}
|
979
|
-
|
980
|
-
/**
|
981
|
-
* Creates a floating point number from big-endian bits
|
982
|
-
*
|
983
|
-
@ingroup FloatingPoint
|
984
|
-
@param bits [in] raw floating point bits in big-endian form
|
985
|
-
@returns a floating point number based on the given bit representation
|
986
|
-
@remarks No error checking is performed, so there are no guarantees that the
|
987
|
-
result is a valid number. BE CAREFUL USING THIS.
|
988
|
-
*/
|
989
|
-
float
|
990
|
-
POSH_FloatFromBigBits( posh_u32_t bits )
|
991
|
-
{
|
992
|
-
union
|
993
|
-
{
|
994
|
-
float f32;
|
995
|
-
posh_u32_t u32;
|
996
|
-
} u;
|
997
|
-
|
998
|
-
u.u32 = bits;
|
999
|
-
#if defined POSH_LITTLE_ENDIAN
|
1000
|
-
u.u32 = POSH_SwapU32( u.u32 );
|
1001
|
-
#endif
|
1002
|
-
|
1003
|
-
return u.f32;
|
1004
|
-
}
|
1005
|
-
|
1006
|
-
#endif /* !defined POSH_NO_FLOAT */
|