fix typedefs

This commit is contained in:
Michael Sippel 2025-05-07 16:29:45 +02:00
parent 3ed7a19270
commit 923fe987dc
Signed by: senvas
GPG key ID: F96CF119C34B64A6
14 changed files with 309 additions and 245 deletions

View file

@ -7,9 +7,9 @@ morph_array_as_valterm_to_lenpfx (Terminator:native.UInt8)
<Seq~<ValueTerminated Terminator> native.UInt8>
--> <Seq~<LengthPrefix native.UInt64> native.UInt8>
```
length_prefix_uint64_t_array_uint8_t_clear(dst);
length_prefix_nativeUInt64_array_nativeUInt8_clear(dst);
while( *src != Terminator )
length_prefix_uint64_t_array_uint8_t_push(dst, *src++);
length_prefix_nativeUInt64_array_nativeUInt8_push(dst, *src++);
```

View file

@ -38,15 +38,15 @@ morph_posint_radix_le (SrcRadix:, DstRadix:)
value += src->items[src->len - i - 1];
}
length_prefix_uint64_t_array_uint64_t_clear( dst );
length_prefix_nativeUInt64_array_nativeUInt64_clear( dst );
#if DstRadix==0
length_prefix_uint64_t_array_uint64_t_push( dst, value );
length_prefix_nativeUInt64_array_nativeUInt64_push( dst, value );
#else
if( value == 0 ) {
length_prefix_uint64_t_array_uint64_t_push( dst, 0 );
length_prefix_nativeUInt64_array_nativeUInt64_push( dst, 0 );
} else while( value > 0 ) {
length_prefix_uint64_t_array_uint64_t_push( dst, value % DstRadix );
length_prefix_nativeUInt64_array_nativeUInt64_push( dst, value % DstRadix );
value /= DstRadix;
}
#endif
@ -97,7 +97,7 @@ morph_posint_endianness (Radix:)
~ <PosInt Radix BigEndian>
~ <Seq~<LengthPrefix native.UInt64> <Digit Radix> ~ native.UInt64>
```
return length_prefix_uint64_t_array_uint64_t_reverse( src, dst );
return length_prefix_nativeUInt64_array_nativeUInt64_reverse( src, dst );
```
morph_posint_endianness (Radix:)
@ -108,5 +108,5 @@ morph_posint_endianness (Radix:)
~ <PosInt Radix LittleEndian>
~ <Seq~<LengthPrefix native.UInt64> <Digit Radix> ~ native.UInt64>
```
return length_prefix_uint64_t_array_uint64_t_reverse( src, dst );
return length_prefix_nativeUInt64_array_nativeUInt64_reverse( src, dst );
```

View file

@ -2,27 +2,37 @@
#include <stdio.h>
#include <stdint.h>
/*
typedef struct { \
LEN_TYPE len; \
ITEM_TYPE items[]; \
} __Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_; \
*/ \
#define LENGTH_PREFIX_ARRAY_TYPE(LEN_TYPE, ITEM_TYPE) \
__Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_
#define LENGTH_PREFIX_ARRAY_CALL(LEN_TYPE, ITEM_TYPE, METHOD) \
length_prefix_##LEN_TYPE##_array_##ITEM_TYPE##_ ## METHOD
#define PRESCAN_LENGTH_PREFIX_CALL(LEN, ITEM, METHOD) \
LENGTH_PREFIX_ARRAY_CALL(LEN, ITEM, METHOD)
#define DEFINE_LENGTH_PREFIX_ARRAY(LEN_TYPE, ITEM_TYPE) \
typedef struct { \
LEN_TYPE len; \
ITEM_TYPE items[]; \
} __Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_; \
\
static inline void length_prefix_##LEN_TYPE##_array_##ITEM_TYPE##_clear( \
__Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_ *data) { \
static inline void PRESCAN_LENGTH_PREFIX_CALL(LEN_TYPE, ITEM_TYPE, clear) \
(__Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_ *data) { \
data->len = 0; \
} \
\
static inline void length_prefix_##LEN_TYPE##_array_##ITEM_TYPE##_push( \
__Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_ *data, \
static inline void PRESCAN_LENGTH_PREFIX_CALL(LEN_TYPE, ITEM_TYPE, push) \
(__Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_ *data, \
ITEM_TYPE value) { \
data->items[data->len++] = value; \
} \
\
static inline int length_prefix_##LEN_TYPE##_array_##ITEM_TYPE##_reverse( \
__Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_ const * restrict src, \
__Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_ *restrict dst) { \
static inline int PRESCAN_LENGTH_PREFIX_CALL(LEN_TYPE, ITEM_TYPE, reverse) \
( __Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_ const * restrict src, \
__Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_ *restrict dst) { \
for (LEN_TYPE i = 0; i < src->len; i++) { \
dst->items[i] = src->items[src->len - 1 - i]; \
} \
@ -30,8 +40,8 @@
return 0; \
} \
\
static inline void length_prefix_##LEN_TYPE##_array_##ITEM_TYPE##_dump( \
__Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_ const * data) { \
static inline void PRESCAN_LENGTH_PREFIX_CALL(LEN_TYPE, ITEM_TYPE, dump) \
( __Seq__LengthPrefix_##LEN_TYPE##___##ITEM_TYPE##_ const * data) { \
printf("Length: %llu\n", (unsigned long long) data->len); \
for (LEN_TYPE i = 0; i < data->len; i++) { \
printf("%llu ", (unsigned long long) data->items[i]); \

View file

@ -12,19 +12,19 @@ morph_seqseq_valsep_uint8 (T: Type, SrcDelim: T, DstDelim: T)
~ < ValueSep DstDelim T >
~ < Seq~<LengthPrefix native.UInt64> T >
```
length_prefix_uint64_t_array_uint8_t_clear( dst );
PRESCAN_LENGTH_PREFIX_CALL(nativeUInt64, T, clear)( dst );
uint8_t * dst_items = dst->items;
for( uint64_t i = 0; i < src->len; ++i ) {
if( src->items[i] == SrcDelim ) {
length_prefix_uint64_t_array_uint8_t_push( dst, DstDelim );
PRESCAN_LENGTH_PREFIX_CALL(nativeUInt64, T, push)( dst, DstDelim );
} else if( src->items[i] == DstDelim ) {
if( DstDelim == '\n' ) {
length_prefix_uint64_t_array_uint8_t_push( dst, '\\' );
length_prefix_uint64_t_array_uint8_t_push( dst, 'n' );
PRESCAN_LENGTH_PREFIX_CALL(nativeUInt64, T, push)( dst, '\\' );
PRESCAN_LENGTH_PREFIX_CALL(nativeUInt64, T, push)( dst, 'n' );
}
} else {
length_prefix_uint64_t_array_uint8_t_push( dst, src->items[i] );
PRESCAN_LENGTH_PREFIX_CALL(nativeUInt64, T, push)( dst, src->items[i] );
}
}
```
@ -42,9 +42,9 @@ morph_seqseq_as_valsep_to_lenpfx (T: Type, Delim: T, EscKey: T)
~ native.UInt64
>
```
length_prefix_uint64_t_array_uint64_t_clear( dst );
length_prefix_nativeUInt64_array_nativeUInt64_clear( dst );
struct LengthPrefix_uint64_t_Array_uint8_t * cur_item = NULL;
struct LengthPrefix_nativeUInt64_Array_nativeUInt8 * cur_item = NULL;
uint8_t const * start = &src->items[0];
uint8_t const * cur = start;
@ -58,7 +58,7 @@ morph_seqseq_as_valsep_to_lenpfx (T: Type, Delim: T, EscKey: T)
cur_item->len = len;
memcpy( cur_item->items, start, len );
length_prefix_uint64_t_array_uint64_t_push( dst, (uint64_t)cur_item );
length_prefix_nativeUInt64_array_nativeUInt64_push( dst, (uint64_t)cur_item );
start = ++cur;
} else {
cur++;
@ -77,17 +77,17 @@ morph_seqeq_as_lenpfx_to_valsep (T: Type, Delim: T, EscKey: T)
~ < ValueSep T Delim >
~ < Seq~<LengthPrefix native.UInt64> T >
```
length_prefix_uint64_t_array_uint8_t_clear( dst );
length_prefix_nativeUInt64_array_nativeUInt8_clear( dst );
for( uint64_t i = 0; i < src->len; ++i ) {
LengthPrefix_uint64_t_Array_uint8_t * item = src->items[i];
LengthPrefix_nativeUInt64_Array_nativeUInt8_t * item = src->items[i];
for( uint64_t j = 0; j < item->len; ++j ) {
length_prefix_uint64_t_array_uint8_t_push( items->items[j] );
length_prefix_nativeUInt64_array_nativeUInt8_push( items->items[j] );
}
if( i+1 < src->len ) {
length_prefix_uint64_t_array_uint8_t_push( Delim );
length_prefix_nativeUInt64_array_nativeUInt8_push( Delim );
}
}
```