genimpl.c

Go to the documentation of this file.
00001 #include "machine.h"
00002 typedef signed char integer1;
00003 typedef short integer2;
00004 /*     Copyright INRIA */
00005 
00006 #define IMPL2(Type) {\
00007 Type FIRST = (Type)*((Type *)first);\
00008 Type LAST  = (Type)*((Type *)last);\
00009 Type *RES  = (Type *)res;\
00010 Type j;\
00011     i = 0;\
00012     for (j=FIRST;j<=LAST;j++){\
00013       RES[i++]=j;\
00014     }\
00015 }
00016 
00017 #define IMPL3(Type) {\
00018 Type FIRST = (Type)*((Type *)first);\
00019 Type STEP  = (Type)*((Type *)step);\
00020 Type LAST  = (Type)*((Type *)last);\
00021 Type *RES  = (Type *)res;\
00022 Type j;\
00023     FIRST=(Type)*((Type *)first);\
00024     LAST=(Type)*((Type *)last);\
00025     STEP=(Type)*((Type *)step);\
00026     RES=(Type *)res;\
00027     i = 0;\
00028     if (STEP<(Type)0) {\
00029       for (j=FIRST;j>=LAST;j+=STEP){\
00030         RES[i++]=j;\
00031       }\
00032     }\
00033     else if (STEP>(Type)0) {\
00034       for (j=FIRST;j<=LAST;j+=STEP){\
00035         RES[i++]=j;\
00036       }\
00037     }\
00038 }
00039 
00040 #define IMPL2DIM(Type) {\
00041 Type FIRST = (Type)*((Type *)first);\
00042 Type LAST  = (Type)*((Type *)last);\
00043      *res = (integer)(LAST-FIRST)+1;\
00044 }
00045 #define IMPL3DIM(Type) {\
00046 Type FIRST = (Type)*((Type *)first);\
00047 Type STEP  = (Type)*((Type *)step);\
00048 Type LAST  = (Type)*((Type *)last);\
00049 Type j;\
00050    i = 0;\
00051    if (STEP<(Type)0) {\
00052      for (j=FIRST;j>=LAST;j=j+STEP) {i++;}\
00053    }\
00054    else if (STEP>(Type)0) {\
00055      for (j=FIRST;j<=LAST;j=j+STEP) {i++;}\
00056    }\
00057    else {\
00058     i=-1;\
00059    }\
00060    *res = i;\
00061 }
00062 
00063 int C2F(genimpl2)(integer *typ,integer *first,integer *last,integer *res)
00064 {
00065   static int i;
00066 
00067   switch (*typ) {
00068   case 1:
00069     IMPL2(integer1);
00070     break;
00071   case 2:
00072     IMPL2(integer2);
00073     break;
00074   case 4:
00075     IMPL2(integer);
00076     break;
00077   case 11:
00078     IMPL2(unsigned char);
00079     break;
00080   case 12:
00081     IMPL2(unsigned short);
00082     break;
00083   case 14:
00084     IMPL2(unsigned int);
00085     break;
00086   }
00087   return 0;
00088 }
00089 
00090 int C2F(genimpl3)(integer *typ,integer *first,integer *step,integer *last,integer *res)
00091 {
00092   static int i;
00093 
00094   switch (*typ) {
00095   case 1:
00096     IMPL3(integer1);
00097     break;
00098   case 2:
00099     IMPL3(integer2);
00100     break;
00101   case 4:
00102     IMPL3(integer);
00103     break;
00104   case 11:
00105     IMPL3(unsigned char);
00106     break;
00107   case 12:
00108     IMPL3(unsigned short);
00109     break;
00110   case 14:
00111     IMPL3(unsigned int);
00112     break;
00113   }
00114   return 0;
00115 }
00116 
00117 int C2F(genimpl2dim)(integer *typ,integer *first,integer *last,integer *res)
00118 {
00119 
00120   switch (*typ) {
00121   case 1:
00122     IMPL2DIM(integer1);
00123     break;
00124   case 2:
00125     IMPL2DIM(integer2);
00126     break;
00127   case 4:
00128     IMPL2DIM(integer);
00129     break;
00130   case 11:
00131     IMPL2DIM(unsigned char);
00132     break;
00133   case 12:
00134     IMPL2DIM(unsigned short);
00135     break;
00136   case 14:
00137     IMPL2DIM(unsigned int);
00138     break;
00139   }
00140   return 0;
00141 }
00142 int C2F(genimpl3dim)(integer * typ,integer * first,integer * step,integer * last,integer * res)
00143 {
00144   static int i;
00145 
00146   switch (*typ) {
00147   case 1:
00148     IMPL3DIM(integer1);
00149     break;
00150   case 2:
00151     IMPL3DIM(integer2);
00152     break;
00153   case 4:
00154     IMPL3DIM(integer);
00155     break;
00156   case 11:
00157     IMPL3DIM(unsigned char);
00158     break;
00159   case 12:
00160     IMPL3DIM(unsigned short);
00161     break;
00162   case 14:
00163     IMPL3DIM(unsigned int);
00164     break;
00165   }
00166   return 0;
00167 }
00168 
00169 

Generated on Sun Mar 4 15:03:57 2007 for Scilab [trunk] by  doxygen 1.5.1