Server 0.0.1
HTTP/REST server implementation

include/class/interface/class.h File Reference

#include <stdarg.h>
#include "class/class.h"
#include "class/interface.h"
Include dependency graph for class.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  i_Class

Defines

#define new(class,...)   classNew(_##class, ##__VA_ARGS__)
#define delete(object)   classDelete((void **)&(object))
#define clone(object)   classClone((void *)(object))

Typedefs

typedef int(* fptr_ctor )(void *, va_list *)
typedef void(* fptr_dtor )(void *)
typedef void(* fptr_clone )(void *, void *const)

Functions

void * classNew (class_ptr,...)
void classDelete (void **)
void * classClone (void *)

Detailed Description

Interface for class handling. Defines new, delete and clone selectors which in turn use the ctor, dtor and clone implementation from the class implementation.

Author:
Georg Hopp

Copyright © 2012 Georg Hopp

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.

Definition in file class.h.


Define Documentation

#define clone (   object)    classClone((void *)(object))

Definition at line 53 of file class.h.

#define delete (   object)    classDelete((void **)&(object))

Definition at line 52 of file class.h.

#define new (   class,
  ... 
)    classNew(_##class, ##__VA_ARGS__)

Definition at line 51 of file class.h.


Typedef Documentation

typedef void(* fptr_clone)(void *, void *const)

Definition at line 36 of file class.h.

typedef int(* fptr_ctor)(void *, va_list *)

Definition at line 34 of file class.h.

typedef void(* fptr_dtor)(void *)

Definition at line 35 of file class.h.


Function Documentation

void* classClone ( void *  )

Definition at line 69 of file i_class.c.

{
        class_ptr class  = GET_CLASS(_object);
        void *    object = calloc(1, class->object_size + sizeof(void*));

        * (class_ptr *)object = class;
        object += sizeof(void*);

#undef clone
        CALL(object, Class, clone, _object);

        return object;
}
void classDelete ( void **  )

Definition at line 58 of file i_class.c.

{
        if (NULL != *object) {
                CALL(*object, Class, dtor);

                free(*object - sizeof(void*));
                *object = NULL;
        }
}

Here is the caller graph for this function:

void* classNew ( class_ptr  ,
  ... 
)

Definition at line 37 of file i_class.c.

{
        void *  object = calloc(1, class->object_size + sizeof(void*));
        va_list params;
        int     ret;

        * (class_ptr *)object = class;
        object += sizeof(void*);

        va_start(params, class);
        RETCALL(object, Class, ctor, ret, &params);
        va_end(params);

        if (-1 == ret) {
                classDelete(&object);
        }

        return object;
}

Here is the call graph for this function:

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines