// SWIG constraint library
// This library file contains typemaps for implementing various kinds of
// constraints. Depends upon the SWIG exception library for generating
// errors in a language-independent manner.
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
%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
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
Real sqrt(Real NONNEGATIVE);
// Required attribute for C# exception handling
#define SWIGCSHARPCANTHROW , canthrow=1
#define SWIGCSHARPCANTHROW
%typemap(check SWIGCSHARPCANTHROW)
SWIG_exception(SWIG_ValueError,"Expected a positive value.");
%typemap(check SWIGCSHARPCANTHROW)
SWIG_exception(SWIG_ValueError,"Expected a negative value.");
%typemap(check SWIGCSHARPCANTHROW)
SWIG_exception(SWIG_ValueError,"Expected a nonzero value.");
%typemap(check SWIGCSHARPCANTHROW)
unsigned int NONNEGATIVE,
unsigned short NONNEGATIVE,
unsigned long NONNEGATIVE,
unsigned char NONNEGATIVE,
SWIG_exception(SWIG_ValueError,"Expected a non-negative value.");
%typemap(check SWIGCSHARPCANTHROW)
unsigned int NONPOSITIVE,
unsigned short NONPOSITIVE,
unsigned long NONPOSITIVE,
unsigned char NONPOSITIVE,
SWIG_exception(SWIG_ValueError,"Expected a non-positive value.");
%typemap(check SWIGCSHARPCANTHROW)
SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
%typemap(check SWIGCSHARPCANTHROW)
SWIG_exception(SWIG_ValueError,"Pointer must be 8-byte aligned.");
%typemap(check SWIGCSHARPCANTHROW)
SWIG_exception(SWIG_ValueError,"Pointer must be 4-byte aligned.");
%typemap(check SWIGCSHARPCANTHROW)
SWIG_exception(SWIG_ValueError,"Pointer must be 2-byte aligned.");