X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Ftypes%2Finteger.c;h=f7f5f23df1135353374f2366ef3a257a3c564b93;hp=b2c429f5129e095ac82412650cd3698ccfb9efdb;hb=7fe001942cc8ece60d945cbfbd1d135ff548dc7d;hpb=11d43b909baeee566511acfec577d4605386fa09 diff --git a/formats/ctf/types/integer.c b/formats/ctf/types/integer.c index b2c429f5..f7f5f23d 100644 --- a/formats/ctf/types/integer.c +++ b/formats/ctf/types/integer.c @@ -21,11 +21,13 @@ */ #include +#include #include #include #include -uint64_t ctf_uint_read(struct stream_pos *pos, +static +uint64_t _aligned_uint_read(struct stream_pos *pos, const struct type_class_integer *int_class) { int rbo = (int_class->byte_order != BYTE_ORDER); /* reverse byte order */ @@ -70,7 +72,8 @@ uint64_t ctf_uint_read(struct stream_pos *pos, } } -int64_t ctf_int_read(struct stream_pos *pos, +static +int64_t _aligned_int_read(struct stream_pos *pos, const struct type_class_integer *int_class) { int rbo = (int_class->byte_order != BYTE_ORDER); /* reverse byte order */ @@ -115,7 +118,8 @@ int64_t ctf_int_read(struct stream_pos *pos, } } -void ctf_uint_write(struct stream_pos *pos, +static +void _aligned_uint_write(struct stream_pos *pos, const struct type_class_integer *int_class, uint64_t v) { @@ -150,7 +154,8 @@ end: move_pos(pos, int_class->len); } -void ctf_int_write(struct stream_pos *pos, +static +void _aligned_int_write(struct stream_pos *pos, const struct type_class_integer *int_class, int64_t v) { @@ -185,3 +190,69 @@ end: move_pos(pos, int_class->len); return; } + +uint64_t ctf_uint_read(struct stream_pos *pos, + const struct type_class_bitfield *int_class) +{ + uint64_t v; + + align_pos(pos, int_class->p.alignment); + if (int_class->byte_order == LITTLE_ENDIAN) + ctf_bitfield_read_le(pos->base, pos->offset, + int_class->len, &v); + else + ctf_bitfield_read_be(pos->base, pos->offset, + int_class->len, &v); + move_pos(pos, int_class->len); + return v; +} + +int64_t ctf_int_read(struct stream_pos *pos, + const struct type_class_bitfield *int_class) +{ + int64_t v; + + align_pos(pos, int_class->p.alignment); + if (int_class->byte_order == LITTLE_ENDIAN) + ctf_bitfield_read_le(pos->base, pos->offset, + int_class->len, &v); + else + ctf_bitfield_read_be(pos->base, pos->offset, + int_class->len, &v); + move_pos(pos, int_class->len); + return v; +} + +void ctf_uint_write(struct stream_pos *pos, + const struct type_class_bitfield *int_class, + uint64_t v) +{ + align_pos(pos, int_class->p.alignment); + if (pos->dummy) + goto end; + if (int_class->byte_order == LITTLE_ENDIAN) + ctf_bitfield_write_le(pos->base, pos->offset, + int_class->len, v); + else + ctf_bitfield_write_be(pos->base, pos->offset, + int_class->len,, v); +end: + move_pos(pos, int_class->len); +} + +void ctf_int_write(struct stream_pos *pos, + const struct type_class_bitfield *int_class, + int64_t v) +{ + align_pos(pos, int_class->p.alignment); + if (pos->dummy) + goto end; + if (int_class->byte_order == LITTLE_ENDIAN) + ctf_bitfield_write_le(pos->base, pos->offset, + int_class->len, v); + else + ctf_bitfield_write_be(pos->base, pos->offset, + int_class->len, v); +end: + move_pos(pos, int_class->len); +}