⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fincstruct.c

📁 FinC is Fava in C! A C-like syntax language. It s designed to apply to embededd system.
💻 C
字号:
#include <fincstruct.h>#include <vector.h>#include <fincdata.h>static void private_finc_struct_init_data(ADT value, ADT data);FinCStruct* finc_struct_new(String* p_name){    FinCStruct *self;    self = (FinCStruct*)mem_new (sizeof(FinCStruct));    object_init_object (OBJECT (self), finc_struct_destroy);    self->name = addref (String, p_name);    self->hash_field = hash_table_new (string_hash, string_equal);	self->size = 0;	self->next_index = 0;    return self;}void finc_struct_destroy(Object* self){    unref(((FinCStruct*)self)->name);    unref(((FinCStruct*)self)->hash_field);    mem_destroy (self);}ADT private_data_p;//also a big bugs!Vector* finc_struct_init_data(FinCStruct* self, ADT p_raw){    Vector* l_vector;    private_data_p = p_raw;    l_vector = vector_new();    hash_table_foreach(self->hash_field, private_finc_struct_init_data, l_vector);    private_data_p = NULL;    return l_vector;}void private_finc_struct_init_data(ADT value, ADT data){    FinCField* l_field;    Vector* l_vector;    FinCData* l_data;    l_field  = (FinCField*)value;    l_vector = (Vector*)data;    l_data = finc_data_new( l_field->type, private_data_p + l_field->offset);    vector_set_at(l_vector, l_field->index, (ADT)l_data);    unref(l_data);}void finc_struct_add_field (FinCStruct* self, FinCField* p_field){    finc_field_set_offset(p_field, self->size);	finc_field_set_index(p_field, self->next_index++);    self->size += finc_type_get_size(p_field->type);    hash_table_insert(self->hash_field, (ADT)p_field->name, OBJECT(p_field));}FinCField* finc_struct_get_field (FinCStruct* self, String* p_name){    return (FinCField*)hash_table_find(self->hash_field, (ADT)p_name);}int finc_struct_get_field_offset (FinCStruct* self, String* p_name){	FinCField* l_field;	int l_offset;	l_field = finc_struct_get_field (self, p_name);	l_offset = finc_field_get_offset(l_field);	unref(l_field);	return l_offset;}int finc_struct_get_field_index (FinCStruct* self, String* p_name){	FinCField* l_field;	int l_index;	l_field = finc_struct_get_field (self, p_name);	l_index = finc_field_get_index(l_field);	unref(l_field);	return l_index;}int finc_struct_get_size (FinCStruct* self){    return self->size;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -