mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-11-13 17:30:12 +00:00
* On windows it's strongly desired to be able to compile straight out of a clean checkout or source download. This means anyone can download the source and investigate something quickly, without having to worry about the hassle of figuring out how the project downloads 3rd party dependencies, fetching them, getting them registered in the right place. * This can't be put in a submodule as git submodules don't get downloaded by default so people new to git will get confusing compilation messages, and someone downloading the source from github directly without cloning via git won't get submodules included. * It does add some extra size to a fresh download/checkout which is unfortunate, but absolutely worth the cost. Shallow checkouts still aren't unfeasibly large, and it's only a one-off cost at clone time.
117 lines
2.6 KiB
OpenEdge ABL
117 lines
2.6 KiB
OpenEdge ABL
/* -----------------------------------------------------------------------------
|
|
* carrays.i
|
|
*
|
|
* SWIG library file containing macros that can be used to manipulate simple
|
|
* pointers as arrays.
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
/* -----------------------------------------------------------------------------
|
|
* %array_functions(TYPE,NAME)
|
|
*
|
|
* Generates functions for creating and accessing elements of a C array
|
|
* (as pointers). Creates the following functions:
|
|
*
|
|
* TYPE *new_NAME(int nelements)
|
|
* void delete_NAME(TYPE *);
|
|
* TYPE NAME_getitem(TYPE *, int index);
|
|
* void NAME_setitem(TYPE *, int index, TYPE value);
|
|
*
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
%define %array_functions(TYPE,NAME)
|
|
%{
|
|
static TYPE *new_##NAME(int nelements) { %}
|
|
#ifdef __cplusplus
|
|
%{ return new TYPE[nelements](); %}
|
|
#else
|
|
%{ return (TYPE *) calloc(nelements,sizeof(TYPE)); %}
|
|
#endif
|
|
%{}
|
|
|
|
static void delete_##NAME(TYPE *ary) { %}
|
|
#ifdef __cplusplus
|
|
%{ delete [] ary; %}
|
|
#else
|
|
%{ free(ary); %}
|
|
#endif
|
|
%{}
|
|
|
|
static TYPE NAME##_getitem(TYPE *ary, int index) {
|
|
return ary[index];
|
|
}
|
|
static void NAME##_setitem(TYPE *ary, int index, TYPE value) {
|
|
ary[index] = value;
|
|
}
|
|
%}
|
|
|
|
TYPE *new_##NAME(int nelements);
|
|
void delete_##NAME(TYPE *ary);
|
|
TYPE NAME##_getitem(TYPE *ary, int index);
|
|
void NAME##_setitem(TYPE *ary, int index, TYPE value);
|
|
|
|
%enddef
|
|
|
|
|
|
/* -----------------------------------------------------------------------------
|
|
* %array_class(TYPE,NAME)
|
|
*
|
|
* Generates a class wrapper around a C array. The class has the following
|
|
* interface:
|
|
*
|
|
* struct NAME {
|
|
* NAME(int nelements);
|
|
* ~NAME();
|
|
* TYPE getitem(int index);
|
|
* void setitem(int index, TYPE value);
|
|
* TYPE * cast();
|
|
* static NAME *frompointer(TYPE *t);
|
|
* }
|
|
*
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
%define %array_class(TYPE,NAME)
|
|
%{
|
|
typedef TYPE NAME;
|
|
%}
|
|
typedef struct {
|
|
/* Put language specific enhancements here */
|
|
} NAME;
|
|
|
|
%extend NAME {
|
|
|
|
#ifdef __cplusplus
|
|
NAME(int nelements) {
|
|
return new TYPE[nelements]();
|
|
}
|
|
~NAME() {
|
|
delete [] self;
|
|
}
|
|
#else
|
|
NAME(int nelements) {
|
|
return (TYPE *) calloc(nelements,sizeof(TYPE));
|
|
}
|
|
~NAME() {
|
|
free(self);
|
|
}
|
|
#endif
|
|
|
|
TYPE getitem(int index) {
|
|
return self[index];
|
|
}
|
|
void setitem(int index, TYPE value) {
|
|
self[index] = value;
|
|
}
|
|
TYPE * cast() {
|
|
return self;
|
|
}
|
|
static NAME *frompointer(TYPE *t) {
|
|
return (NAME *) t;
|
|
}
|
|
|
|
};
|
|
|
|
%types(NAME = TYPE);
|
|
|
|
%enddef
|
|
|