Ejemplo n.º 1
0
static void
set_enums(struct pbc_env *p, struct file_t *file) {
	int n = pbc_array_size(file->enum_size);
	int i;
	int start = 0;
	for (i=0;i<n;i++) {
		pbc_var name;
		_pbcA_index(file->enum_name,i,name);
		pbc_var var;
		_pbcA_index(file->enum_size,i,var);
		set_enum_one(p, file, name->s.str, start , (int)var->integer.low);
		start += var->integer.low;
	}
}
Ejemplo n.º 2
0
static void
set_msgs(struct pbc_pattern * FIELD_T, struct pbc_env *p, struct file_t *file , pbc_array queue) {
	int n = pbc_array_size(file->message_size);
	int i;
	int start = 0;
	for (i=0;i<n;i++) {
		pbc_var name;
		_pbcA_index(file->message_name,i,name);
		pbc_var sz;
		_pbcA_index(file->message_size,i,sz);
		set_msg_one(FIELD_T, p, file, name->s.str, start , (int)sz->integer.low , queue);
		start += sz->integer.low;
	}
}
Ejemplo n.º 3
0
static void
set_enum_one(struct pbc_env *p, struct file_t *file, const char *name, int start, int sz) {
	struct map_kv *table = malloc(sz * sizeof(struct map_kv));
	int i;
	for (i=0;i<sz;i++) {
		pbc_var id;
		pbc_var string;
		_pbcA_index(file->enum_id, start+i, id);
		_pbcA_index(file->enum_string, start+i, string);
		table[i].id = (int)id->integer.low;
		table[i].pointer = (void *)string->s.str;
	}
	_pbcP_push_enum(p,name,table,sz);

	free(table);
}
Ejemplo n.º 4
0
static void
set_msg_one(struct pbc_pattern * FIELD_T, struct pbc_env *p, struct file_t *file, const char *name, int start, int sz , pbc_array queue) {
	int i;
	for (i=0;i<sz;i++) {
		pbc_var _field;
		_pbcA_index(file->message_field, start+i, _field);
		struct field_t field;

		int ret = pbc_pattern_unpack(FIELD_T, _field->m.buffer, _field->m.len, &field);
		if (ret != 0) {
			continue;
		}
		struct _field f;
		f.id = field.id;
		f.name = field.name->s.str;
		f.type = field.type;
		f.label = field.label;
		f.type_name.n = field.type_name->s.str;
		set_default(&f, &field);

		_pbcP_push_message(p,name, &f , queue);

		// don't need to close pattern since no array
	}
	_pbcP_init_message(p, name);
}
Ejemplo n.º 5
0
uint32_t 
pbc_array_integer(pbc_array array, int index, uint32_t *hi) {
	pbc_var var;
	_pbcA_index(array , index , var);
	if (hi) {
		*hi = var->integer.hi;
	}
	return var->integer.low;
}
Ejemplo n.º 6
0
void
_pbcB_register_fields(struct pbc_env *p, pbc_array queue) {
	int sz = pbc_array_size(queue);
	int i;
	for (i=0;i<sz;i++) {
		pbc_var atom;
		_pbcA_index(queue,i,atom);
		struct _field * f = atom->m.buffer;
		set_field_one(p, f);
	}
}
Ejemplo n.º 7
0
double 
pbc_array_real(pbc_array array, int index) {
	pbc_var var;
	_pbcA_index(array , index , var);
	return var->real;
}