special cases and other things in wxPython, and since I plan on making several more, I've decided to put the SWIG sources in wxPython's CVS instead of relying on maintaining patches. This effectivly becomes a fork of an obsolete version of SWIG, :-( but since SWIG 1.3 still doesn't have some things I rely on in 1.1, not to mention that my custom patches would all have to be redone, I felt that this is the easier road to take. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15307 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			209 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
| // 
 | |
| // SWIG constraint library
 | |
| // Dave Beazley
 | |
| // May 4, 1997
 | |
| //
 | |
| // 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.
 | |
| 
 | |
| #ifdef AUTODOC
 | |
| %section "Constraint Library",info,after,pre,nosort,skip=1,chop_left=3,chop_right=0,chop_top=0,chop_bottom=0
 | |
| 
 | |
| %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
 | |
| 
 | |
| // Positive numbers
 | |
| 
 | |
| %typemap(check) 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 ($target <= 0) {
 | |
|     SWIG_exception(SWIG_ValueError,"Expected a positive value.");
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Negative numbers
 | |
| 
 | |
| %typemap(check) 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 ($target >= 0) {
 | |
|     SWIG_exception(SWIG_ValueError,"Expected a negative value.");
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Nonzero numbers
 | |
| 
 | |
| %typemap(check) 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 ($target == 0) {
 | |
|     SWIG_exception(SWIG_ValueError,"Expected a nonzero value.");
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Nonnegative numbers
 | |
| 
 | |
| %typemap(check) 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 ($target < 0) {
 | |
|     SWIG_exception(SWIG_ValueError,"Expected a non-negative value.");
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Nonpositive numbers
 | |
| 
 | |
| %typemap(check) 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 ($target < 0) {
 | |
|     SWIG_exception(SWIG_ValueError,"Expected a non-positive value.");
 | |
|   }
 | |
| }
 | |
|                 
 | |
| // Non-NULL pointer
 | |
| 
 | |
| %typemap(check) void *            NONNULL,
 | |
|                 Pointer           NONNULL
 | |
| {
 | |
|   if (!$target) {
 | |
|     SWIG_exception(SWIG_ValueError,"Received a NULL pointer.");
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Aligned pointers
 | |
| 
 | |
| %typemap(check) void *            ALIGN8,
 | |
|                 Pointer           ALIGN8
 | |
| {
 | |
|    long tmp;
 | |
|    tmp = (long) $target;
 | |
|    if (tmp & 7) {
 | |
|      SWIG_exception(SWIG_ValueError,"Pointer must be 8-byte aligned.");
 | |
|    }
 | |
| }
 | |
| 
 | |
| %typemap(check) void *            ALIGN4,
 | |
|                 Pointer           ALIGN4
 | |
| {
 | |
|    long tmp;
 | |
|    tmp = (long) $target;
 | |
|    if (tmp & 3) {
 | |
|      SWIG_exception(SWIG_ValueError,"Pointer must be 4-byte aligned.");
 | |
|    }
 | |
| }
 | |
| 
 | |
| %typemap(check) void *            ALIGN2,
 | |
|                 Pointer           ALIGN2
 | |
| {
 | |
|    long tmp;
 | |
|    tmp = (long) $target;
 | |
|    if (tmp & 1) {
 | |
|      SWIG_exception(SWIG_ValueError,"Pointer must be 2-byte aligned.");
 | |
|    }
 | |
| }
 | |
| 
 | |
| 
 |