Thursday, August 2, 2012

Defining an Object for the GDS Library

If you don't know about the basics of the GDS library, be sure to read this first:

In order to work with the data structures defined in the GDS library, your structure (which we shall call an object from now on) must be defined in a certain way. In this article I will provide you with a simple example on how to define such an object.

The first thing that you must do is the structure declaration:
typedef struct
{
   int value;
}Integer;
The structure above is a simple wrapper for a integer, containing only one member who shall represent the value of the integer.

The object must implement the following operations defined by the Interface data structure:
Operation Description
Copy Creates a hard copy of the object
Compare Compares an object with another object of the same type.
Destroy Frees the memory allocated for the current object
Our example implementation is:
Integer* Integer_Copy(const Integer* integer)
{
   Integer *i = NULL;
   i = malloc(sizeof(Integer));
   i->value = integer->value;
   return i;
}

Integer* Integer_Destroy(Integer* integer)
{
   free(integer);
   return NULL;
}

int Integer_Compare(const Integer* i1, const Integer* i2)
{
   return (*(int*)(i1->value) - *(int*)(i2->value));
}
As you probably observed in the int Integer_Compare(const Integer *i1, const Integer *i2) the member value of the Integer object uses a double cast. This must be done because the interface functions have void* parameters.

Also, I consider good practice to define an "constructor"-like function for the structure:
Integer* Integer_Create(int value)
{
   Integer *i = NULL;
   i = malloc(sizeof(Integer));
   i->value = value;
   return i;
}
To see the full source check the following links:

No comments:

Post a Comment

Got a question regarding something in the article? Leave me a comment and I will get back at you as soon as I can!

Related Posts Plugin for WordPress, Blogger...
Recommended Post Slide Out For Blogger