00001
00019 #ifndef _CompilerCharacteristics_h_
00020 #define _CompilerCharacteristics_h_
00021
00022 #include "F90ArrayDataType.h"
00023
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027
00028
00033 typedef enum
00034 {
00035 F90_Array,
00036 F90_Pointer,
00037 F90_ArrayPointer,
00039 F90_ArrayPointerInDerived,
00040 F90_DerivedPointer,
00041 F90_NonArray
00042 } F90_DescType;
00043
00044
00054 typedef enum
00055 {
00056 F90_Hidden,
00057 F90_NoHidden,
00058 F90_PointerWithHiddenDesc
00060 } F90_HiddenDescType;
00061
00062
00074 typedef struct
00075 {
00076 int (*setArrayDesc) (void* desc,
00077 void* base_addr,
00078 int rank,
00079 F90_DescType kind,
00080 F90_ArrayDataType data_type,
00081 unsigned long element_size,
00082 const long* lowerBound,
00083 const unsigned long* extent,
00084 const long* strideMult
00085 );
00086
00087 int (*resetArrayDesc) (void* desc,
00088 void* base_addr,
00089 int rank,
00090 const long* lowerBound,
00091 const unsigned long* extent,
00092 const long* strideMult
00093 );
00094
00095 void* (*createArrayDesc) (void* desc,
00096 void* hidden,
00097 int rank,
00098 F90_DescType kind
00099 );
00100
00101 int (*createArrayDescAndHidden) (void* src,
00102 int rank,
00103 F90_DescType kind,
00104 void** desc,
00105 void** hidden
00106 );
00107 int (*freeArrayDescAndHidden) (F90_DescType kind, void* desc, void* hidden);
00108
00109 int (*copyToArrayDescAndHidden) (void* src,
00110 int rank,
00111 F90_DescType kind,
00112 void* dest,
00113 void* hidden
00114 );
00115
00116 void* (*getArrayBaseAddress ) (const void* desc, int rank);
00117 unsigned long (*getArraySize) (const void* desc, int rank);
00118
00119 long (*getArrayLowerBound) (const void* desc, int rank, int dim);
00120 unsigned long (*getArrayExtent ) (const void* desc, int rank, int dim);
00121 long (*getArrayStrideMult) (const void* desc, int rank, int dim);
00122
00123 unsigned long (*getArrayDescSize) (int rank);
00124
00125 int (*nullifyArrayDesc) (void* desc, int rank);
00126 int (*verifyArrayDesc ) (const void* desc, int rank);
00127
00128 F90_HiddenDescType (*hiddenArrayDescType) (F90_DescType kind);
00129
00130 char* (*getMangledName) (const char* fun_name, const char* mod_name);
00131
00132 int (*printArrayDesc ) (const void* desc, int rank);
00133 int (*equalsArrayDesc) (const void* desc2, const void* desc1, int rank);
00134
00135 } F90_CompilerCharacteristics;
00136
00137
00149 int F90_SetCompilerCharacteristics(F90_CompilerCharacteristics* cc,
00150 const char* compiler
00151 );
00152
00153
00154 #ifdef __cplusplus
00155 }
00156 #endif
00157
00158 #endif