gisi: Make subblock iterator use new message API

This commit is contained in:
Aki Niemi 2010-11-14 18:20:08 +02:00
parent 785771f0be
commit 4f14a6c179
2 changed files with 19 additions and 13 deletions

View File

@ -45,10 +45,13 @@ static inline void bcd_to_mccmnc(const uint8_t *restrict bcd,
mnc[3] = '\0'; mnc[3] = '\0';
} }
void g_isi_sb_iter_init_full(GIsiSubBlockIter *iter, const void *restrict data, void g_isi_sb_iter_init_full(GIsiSubBlockIter *iter, const GIsiMessage *msg,
size_t len, size_t used, gboolean longhdr, size_t used, gboolean longhdr,
uint16_t sub_blocks) uint16_t sub_blocks)
{ {
const uint8_t *data = g_isi_msg_data(msg);
size_t len = g_isi_msg_data_len(msg);
if (!data) if (!data)
len = used = 0; len = used = 0;
@ -58,9 +61,12 @@ void g_isi_sb_iter_init_full(GIsiSubBlockIter *iter, const void *restrict data,
iter->sub_blocks = len > used ? sub_blocks : 0; iter->sub_blocks = len > used ? sub_blocks : 0;
} }
void g_isi_sb_iter_init(GIsiSubBlockIter *iter, const void *restrict data, void g_isi_sb_iter_init(GIsiSubBlockIter *iter, const GIsiMessage *msg,
size_t len, size_t used) size_t used)
{ {
const uint8_t *data = g_isi_msg_data(msg);
size_t len = g_isi_msg_data_len(msg);
if (!data) if (!data)
len = used = 0; len = used = 0;
@ -107,6 +113,7 @@ gboolean g_isi_sb_iter_get_data(const GIsiSubBlockIter *restrict iter,
if ((size_t)pos > g_isi_sb_iter_get_len(iter) if ((size_t)pos > g_isi_sb_iter_get_len(iter)
|| iter->start + pos > iter->end) || iter->start + pos > iter->end)
return FALSE; return FALSE;
*data = (void *)iter->start + pos; *data = (void *)iter->start + pos;
return TRUE; return TRUE;
} }
@ -117,6 +124,7 @@ gboolean g_isi_sb_iter_get_byte(const GIsiSubBlockIter *restrict iter,
if ((size_t)pos > g_isi_sb_iter_get_len(iter) if ((size_t)pos > g_isi_sb_iter_get_len(iter)
|| iter->start + pos > iter->end) || iter->start + pos > iter->end)
return FALSE; return FALSE;
*byte = iter->start[pos]; *byte = iter->start[pos];
return TRUE; return TRUE;
} }

View File

@ -28,22 +28,20 @@ extern "C" {
#include <stdint.h> #include <stdint.h>
#include "message.h"
struct _GIsiSubBlockIter { struct _GIsiSubBlockIter {
uint8_t *start; uint8_t *start;
uint8_t *end; uint8_t *end;
uint16_t longhdr; gboolean longhdr;
uint16_t sub_blocks; uint16_t sub_blocks;
}; };
typedef struct _GIsiSubBlockIter GIsiSubBlockIter; typedef struct _GIsiSubBlockIter GIsiSubBlockIter;
void g_isi_sb_iter_init(GIsiSubBlockIter *iter, void g_isi_sb_iter_init(GIsiSubBlockIter *iter, const GIsiMessage *msg,
const void *restrict data, size_t used);
size_t len, size_t used); void g_isi_sb_iter_init_full(GIsiSubBlockIter *iter, const GIsiMessage *msg,
void g_isi_sb_iter_init_full(GIsiSubBlockIter *iter, size_t used, gboolean longhdr,
const void *restrict data,
size_t len, size_t used,
gboolean longhdr,
uint16_t sub_blocks); uint16_t sub_blocks);
gboolean g_isi_sb_iter_is_valid(const GIsiSubBlockIter *iter); gboolean g_isi_sb_iter_is_valid(const GIsiSubBlockIter *iter);