remove dependency on internal.h for base64_sem2

This commit is contained in:
Sven M. Hallberg 2013-02-17 17:00:04 +01:00
parent 51b9082837
commit f1f7c4f488

View file

@ -15,7 +15,6 @@
#include "../src/hammer.h" #include "../src/hammer.h"
#include "../src/glue.h" #include "../src/glue.h"
#include "../src/internal.h" // for h_carray functions (XXX ?!)
#include <assert.h> #include <assert.h>
@ -47,13 +46,7 @@ uint8_t bsfdig_value(const HParsedToken *p)
} }
// helper: append a byte value to a sequence // helper: append a byte value to a sequence
void seq_append_byte(HCountedArray *a, uint8_t b) #define seq_append_byte(res, b) h_seq_snoc(res, H_MAKE_UINT(b))
{
HParsedToken *item = h_arena_malloc(a->arena, sizeof(HParsedToken));
item->token_type = TT_UINT;
item->uint = b;
h_carray_append(a, item);
}
const HParsedToken *act_base64(const HParseResult *p) const HParsedToken *act_base64(const HParseResult *p)
{ {
@ -75,9 +68,7 @@ const HParsedToken *act_base64(const HParseResult *p)
b64_1 = NULL; b64_1 = NULL;
// allocate result sequence // allocate result sequence
HParsedToken *res = h_arena_malloc(p->arena, sizeof(HParsedToken)); HParsedToken *res = H_MAKE_SEQ();
res->token_type = TT_SEQUENCE;
res->seq = h_carray_new(p->arena);
// concatenate base64_3 blocks // concatenate base64_3 blocks
for(size_t i=0; i<b64_3->seq->used; i++) { for(size_t i=0; i<b64_3->seq->used; i++) {
@ -88,9 +79,9 @@ const HParsedToken *act_base64(const HParseResult *p)
x <<= 6; x |= bsfdig_value(digits[1]); x <<= 6; x |= bsfdig_value(digits[1]);
x <<= 6; x |= bsfdig_value(digits[2]); x <<= 6; x |= bsfdig_value(digits[2]);
x <<= 6; x |= bsfdig_value(digits[3]); x <<= 6; x |= bsfdig_value(digits[3]);
seq_append_byte(res->seq, (x >> 16) & 0xFF); seq_append_byte(res, (x >> 16) & 0xFF);
seq_append_byte(res->seq, (x >> 8) & 0xFF); seq_append_byte(res, (x >> 8) & 0xFF);
seq_append_byte(res->seq, x & 0xFF); seq_append_byte(res, x & 0xFF);
} }
// append one trailing base64_2 or _1 block // append one trailing base64_2 or _1 block
@ -99,13 +90,13 @@ const HParsedToken *act_base64(const HParseResult *p)
uint32_t x = bsfdig_value(digits[0]); uint32_t x = bsfdig_value(digits[0]);
x <<= 6; x |= bsfdig_value(digits[1]); x <<= 6; x |= bsfdig_value(digits[1]);
x <<= 6; x |= bsfdig_value(digits[2]); x <<= 6; x |= bsfdig_value(digits[2]);
seq_append_byte(res->seq, (x >> 10) & 0xFF); seq_append_byte(res, (x >> 10) & 0xFF);
seq_append_byte(res->seq, (x >> 2) & 0xFF); seq_append_byte(res, (x >> 2) & 0xFF);
} else if(b64_1) { } else if(b64_1) {
HParsedToken **digits = b64_1->seq->elements; HParsedToken **digits = b64_1->seq->elements;
uint32_t x = bsfdig_value(digits[0]); uint32_t x = bsfdig_value(digits[0]);
x <<= 6; x |= bsfdig_value(digits[1]); x <<= 6; x |= bsfdig_value(digits[1]);
seq_append_byte(res->seq, (x >> 4) & 0xFF); seq_append_byte(res, (x >> 4) & 0xFF);
} }
return res; return res;