Major cleanup
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@4155 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
107922f5f8
commit
ef966de866
12 changed files with 47 additions and 196 deletions
97
SWIG/Source/DOH/void.c
Normal file
97
SWIG/Source/DOH/void.c
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* void.c
|
||||
*
|
||||
* Implements a "void" object that is really just a DOH container around
|
||||
* an arbitrary C object represented as a void *.
|
||||
*
|
||||
* Author(s) : David Beazley (beazley@cs.uchicago.edu)
|
||||
*
|
||||
* Copyright (C) 1999-2000. The University of Chicago
|
||||
* See the file LICENSE for information on usage and redistribution.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
char cvsroot_void_c[] = "$Header$";
|
||||
|
||||
#include "dohint.h"
|
||||
|
||||
typedef struct {
|
||||
void *ptr;
|
||||
void (*del)(void *);
|
||||
} VoidObj;
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Void_delete()
|
||||
*
|
||||
* Delete a void object. Invokes the destructor supplied at the time of creation.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static void
|
||||
Void_delete(DOH *vo) {
|
||||
VoidObj *v = (VoidObj *) ObjData(vo);
|
||||
if (v->del)
|
||||
(*v->del)(v->ptr);
|
||||
DohFree(v);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Void_copy()
|
||||
*
|
||||
* Copies a void object. This is only a shallow copy. The object destruction
|
||||
* function is not copied in order to avoid potential double-free problems.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static DOH *
|
||||
Void_copy(DOH *vo) {
|
||||
VoidObj *v = (VoidObj *) ObjData(vo);
|
||||
return NewVoid(v->ptr,0);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Void_data()
|
||||
*
|
||||
* Returns the void * stored in the object.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static void *
|
||||
Void_data(DOH *vo) {
|
||||
VoidObj *v = (VoidObj *) ObjData(vo);
|
||||
return v->ptr;
|
||||
}
|
||||
|
||||
static DohObjInfo DohVoidType = {
|
||||
"VoidObj", /* objname */
|
||||
Void_delete, /* doh_del */
|
||||
Void_copy, /* doh_copy */
|
||||
0, /* doh_clear */
|
||||
0, /* doh_str */
|
||||
Void_data, /* doh_data */
|
||||
0, /* doh_dump */
|
||||
0, /* doh_len */
|
||||
0, /* doh_hash */
|
||||
0, /* doh_cmp */
|
||||
0, /* doh_setfile */
|
||||
0, /* doh_getfile */
|
||||
0, /* doh_setline */
|
||||
0, /* doh_getline */
|
||||
0, /* doh_mapping */
|
||||
0, /* doh_sequence */
|
||||
0, /* doh_file */
|
||||
0, /* doh_string */
|
||||
0, /* doh_reserved */
|
||||
0, /* clientdata */
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* NewVoid()
|
||||
*
|
||||
* Creates a new Void object given a void * and an optional destructor function.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
DOH *
|
||||
DohNewVoid(void *obj, void (*del)(void *)) {
|
||||
VoidObj *v;
|
||||
v = (VoidObj *) DohMalloc(sizeof(VoidObj));
|
||||
v->ptr = obj;
|
||||
v->del = del;
|
||||
return DohObjMalloc(&DohVoidType,v);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue