Hi Gaganjyot, your examples are high level but need some note:
> Dwg_Object_LAYER ** extract_layers(Dwg_Data *dwg) There is a Dwg_Object_LAYER_CONTROL struct in the drawing which represents the layer table. A good API function would be: Dwg_Object_LAYER_CONTROL* dwg_get_layer_control(Dwg_Data *dwg); To access the layer control these functions are possible: // returns the number of records in the layer table int dwg_layer_control_get_length(Dwg_Object_LAYER_CONTROL *ctrl); // returns the layer at a given index Dwg_Object_LAYER* dwg_layer_control_get_at(Dwg_Object_LAYER_CONTROL *ctrl, int index); // returns the layer with a given handle Dwg_Object_LAYER* dwg_layer_control_get_by_handle(Dwg_Object_LAYER_CONTROL *ctrl, Dwg_Handle *handle); // returns the layer with a given handle Dwg_Object_LAYER* dwg_layer_control_get_by_name(Dwg_Object_LAYER_CONTROL *ctrl, DWGCHAR *name); > unsigned char * > get_layer_name(Dwg_Object_Entity *entity, Dwg_Object_LAYER *layer) This function is a litle bit too high level. It not only returns the name of a layer but the layer itself. It wold be better to split the function: Dwg_Object_LAYER* dwg_entity_get_layer(Dwg_Object_Entity *entity); DWGCHAR dwg_layer_get_name(Dwg_Object_LAYER *layer); An API should hide the implementation details, that means a user of the API should not see the variables of internal structs like Dwg_Object_LAYER_CONTROL. Declare it as an opaque pointer in the header for the API: typedef struct Dwg_Object_LAYER_CONTROL Dwg_Object_LAYER_CONTROL; In the .c file where you implement the functions you can include the dwg.h and have the detailed definitions of all structs. regards Till Am 24.05.2013 um 17:54 schrieb gagan: > On 5/24/13, Rodrigo Rodrigues da Silva <pita...@members.fsf.org> wrote: > > <snip> > >> As for low-level/high-level examples: >> >> >> Dwg_Object * should_be_layer = obj->tio.entity->layer->obj; >> Dwg_Object_LAYER * layer; >> unsigned int _type = should_be_layer->type; >> //dwg_print_object(should_be_layer); >> printf("type = %u ", _type); >> if (_type == 51) >> { >> layer = obj->tio.entity->layer->obj->tio.object->tio.LAYER; //low >> level struct access >> >> in a higher level c-ish way: >> >> Dwg_Object_LAYER * layer; >> >> int error = dwg_get_obj_layer(obj, &layer); //higher level c api > > <snip> > >> another example (I've implemented it already, I guess) >> >> int layer_count = dwg_get_layer_count(&dwg_data); > > Reading these, I have created 2 examples, Please have a look at them > and tell me if we can consider them developed in high level C ? > > My API code :- > > Dwg_Object_LAYER ** extract_layers(Dwg_Data *dwg) > { > int i, a=0; > Dwg_Object_LAYER **layer = (Dwg_Object_LAYER **)malloc( > dwg_get_layer_count(dwg) * (sizeof (Dwg_Object_LAYER*) + 10)); > for (i = 0; i < dwg->num_objects; i++) > { > if(DWG_TYPE_LAYER==dwg->object[i].type) > { > layer[a] = dwg->object[i].tio.object->tio.LAYER; > a++; > } > } > return layer; > } > > Application code :- > > extract_layers(&dwg); > > My API code :- > > unsigned char * > get_layer_name(Dwg_Object_Entity *entity, Dwg_Object_LAYER *layer) > { > layer = entity->layer->obj->tio.object->tio.LAYER; > return layer->entry_name; > } > > Application code :- > Dwg_Object_LAYER *layer; > get_layer_name(entity, layer); //here entity can be any, user should > know how to get entity here. > > -- > Thanks > Gaganjyot >