mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-06 22:05:39 +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.
225 lines
6.9 KiB
OpenEdge ABL
225 lines
6.9 KiB
OpenEdge ABL
/* -----------------------------------------------------------------------------
|
|
* constraints.i
|
|
*
|
|
* SWIG constraints library.
|
|
*
|
|
* SWIG library file containing typemaps for implementing various kinds of
|
|
* constraints. Depends upon the SWIG exception library for generating
|
|
* errors in a language-independent manner.
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
#ifdef AUTODOC
|
|
%text %{
|
|
%include <constraints.i>
|
|
|
|
This library provides support for applying constraints to function
|
|
arguments. Using a constraint, you can restrict arguments to be
|
|
positive numbers, non-NULL pointers, and so on. The following
|
|
constraints are available :
|
|
|
|
Number POSITIVE - Positive number (not zero)
|
|
Number NEGATIVE - Negative number (not zero)
|
|
Number NONZERO - Nonzero number
|
|
Number NONNEGATIVE - Positive number (including zero)
|
|
Number NONPOSITIVE - Negative number (including zero)
|
|
Pointer NONNULL - Non-NULL pointer
|
|
Pointer ALIGN8 - 8-byte aligned pointer
|
|
Pointer ALIGN4 - 4-byte aligned pointer
|
|
Pointer ALIGN2 - 2-byte aligned pointer
|
|
|
|
To use the constraints, you need to "apply" them to specific
|
|
function arguments in your code. This is done using the %apply
|
|
directive. For example :
|
|
|
|
%apply Number NONNEGATIVE { double nonneg };
|
|
double sqrt(double nonneg); // Name of argument must match
|
|
|
|
%apply Pointer NONNULL { void *ptr };
|
|
void *malloc(int POSITIVE); // May return a NULL pointer
|
|
void free(void *ptr); // May not accept a NULL pointer
|
|
|
|
Any function argument of the type you specify with the %apply directive
|
|
will be checked with the appropriate constraint. Multiple types may
|
|
be specified as follows :
|
|
|
|
%apply Pointer NONNULL { void *, Vector *, List *, double *};
|
|
|
|
In this case, all of the types listed would be checked for non-NULL
|
|
pointers.
|
|
|
|
The common datatypes of int, short, long, unsigned int, unsigned long,
|
|
unsigned short, unsigned char, signed char, float, and double can be
|
|
checked without using the %apply directive by simply using the
|
|
constraint name as the parameter name. For example :
|
|
|
|
double sqrt(double NONNEGATIVE);
|
|
double log(double POSITIVE);
|
|
|
|
If you have used typedef to change type-names, you can also do this :
|
|
|
|
%apply double { Real }; // Make everything defined for doubles
|
|
// work for Reals.
|
|
Real sqrt(Real NONNEGATIVE);
|
|
Real log(Real POSITIVE);
|
|
|
|
%}
|
|
#endif
|
|
|
|
%include <exception.i>
|
|
|
|
#ifdef SWIGCSHARP
|
|
// Required attribute for C# exception handling
|
|
#define SWIGCSHARPCANTHROW , canthrow=1
|
|
#else
|
|
#define SWIGCSHARPCANTHROW
|
|
#endif
|
|
|
|
|
|
// Positive numbers
|
|
|
|
%typemap(check SWIGCSHARPCANTHROW)
|
|
int POSITIVE,
|
|
short POSITIVE,
|
|
long POSITIVE,
|
|
unsigned int POSITIVE,
|
|
unsigned short POSITIVE,
|
|
unsigned long POSITIVE,
|
|
signed char POSITIVE,
|
|
unsigned char POSITIVE,
|
|
float POSITIVE,
|
|
double POSITIVE,
|
|
Number POSITIVE
|
|
{
|
|
if ($1 <= 0) {
|
|
SWIG_exception(SWIG_ValueError,"Expected a positive value.");
|
|
}
|
|
}
|
|
|
|
// Negative numbers
|
|
|
|
%typemap(check SWIGCSHARPCANTHROW)
|
|
int NEGATIVE,
|
|
short NEGATIVE,
|
|
long NEGATIVE,
|
|
unsigned int NEGATIVE,
|
|
unsigned short NEGATIVE,
|
|
unsigned long NEGATIVE,
|
|
signed char NEGATIVE,
|
|
unsigned char NEGATIVE,
|
|
float NEGATIVE,
|
|
double NEGATIVE,
|
|
Number NEGATIVE
|
|
{
|
|
if ($1 >= 0) {
|
|
SWIG_exception(SWIG_ValueError,"Expected a negative value.");
|
|
}
|
|
}
|
|
|
|
// Nonzero numbers
|
|
|
|
%typemap(check SWIGCSHARPCANTHROW)
|
|
int NONZERO,
|
|
short NONZERO,
|
|
long NONZERO,
|
|
unsigned int NONZERO,
|
|
unsigned short NONZERO,
|
|
unsigned long NONZERO,
|
|
signed char NONZERO,
|
|
unsigned char NONZERO,
|
|
float NONZERO,
|
|
double NONZERO,
|
|
Number NONZERO
|
|
{
|
|
if ($1 == 0) {
|
|
SWIG_exception(SWIG_ValueError,"Expected a nonzero value.");
|
|
}
|
|
}
|
|
|
|
// Nonnegative numbers
|
|
|
|
%typemap(check SWIGCSHARPCANTHROW)
|
|
int NONNEGATIVE,
|
|
short NONNEGATIVE,
|
|
long NONNEGATIVE,
|
|
unsigned int NONNEGATIVE,
|
|
unsigned short NONNEGATIVE,
|
|
unsigned long NONNEGATIVE,
|
|
signed char NONNEGATIVE,
|
|
unsigned char NONNEGATIVE,
|
|
float NONNEGATIVE,
|
|
double NONNEGATIVE,
|
|
Number NONNEGATIVE
|
|
{
|
|
if ($1 < 0) {
|
|
SWIG_exception(SWIG_ValueError,"Expected a non-negative value.");
|
|
}
|
|
}
|
|
|
|
// Nonpositive numbers
|
|
|
|
%typemap(check SWIGCSHARPCANTHROW)
|
|
int NONPOSITIVE,
|
|
short NONPOSITIVE,
|
|
long NONPOSITIVE,
|
|
unsigned int NONPOSITIVE,
|
|
unsigned short NONPOSITIVE,
|
|
unsigned long NONPOSITIVE,
|
|
signed char NONPOSITIVE,
|
|
unsigned char NONPOSITIVE,
|
|
float NONPOSITIVE,
|
|
double NONPOSITIVE,
|
|
Number NONPOSITIVE
|
|
{
|
|
if ($1 > 0) {
|
|
SWIG_exception(SWIG_ValueError,"Expected a non-positive value.");
|
|
}
|
|
}
|
|
|
|
// Non-NULL pointer
|
|
|
|
%typemap(check SWIGCSHARPCANTHROW)
|
|
void * NONNULL,
|
|
Pointer NONNULL
|
|
{
|
|
if (!$1) {
|
|
SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
|
|
}
|
|
}
|
|
|
|
// Aligned pointers
|
|
|
|
%typemap(check SWIGCSHARPCANTHROW)
|
|
void * ALIGN8,
|
|
Pointer ALIGN8
|
|
{
|
|
unsigned long long tmp;
|
|
tmp = (unsigned long long) $1;
|
|
if (tmp & 7) {
|
|
SWIG_exception(SWIG_ValueError,"Pointer must be 8-byte aligned.");
|
|
}
|
|
}
|
|
|
|
%typemap(check SWIGCSHARPCANTHROW)
|
|
void * ALIGN4,
|
|
Pointer ALIGN4
|
|
{
|
|
unsigned long long tmp;
|
|
tmp = (unsigned long long) $1;
|
|
if (tmp & 3) {
|
|
SWIG_exception(SWIG_ValueError,"Pointer must be 4-byte aligned.");
|
|
}
|
|
}
|
|
|
|
%typemap(check SWIGCSHARPCANTHROW)
|
|
void * ALIGN2,
|
|
Pointer ALIGN2
|
|
{
|
|
unsigned long long tmp;
|
|
tmp = (unsigned long long) $1;
|
|
if (tmp & 1) {
|
|
SWIG_exception(SWIG_ValueError,"Pointer must be 2-byte aligned.");
|
|
}
|
|
}
|
|
|
|
|