1*8a106958SDamjan Jovanovic /************************************************************** 2*8a106958SDamjan Jovanovic * 3*8a106958SDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 4*8a106958SDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 5*8a106958SDamjan Jovanovic * distributed with this work for additional information 6*8a106958SDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 7*8a106958SDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 8*8a106958SDamjan Jovanovic * "License"); you may not use this file except in compliance 9*8a106958SDamjan Jovanovic * with the License. You may obtain a copy of the License at 10*8a106958SDamjan Jovanovic * 11*8a106958SDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 12*8a106958SDamjan Jovanovic * 13*8a106958SDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 14*8a106958SDamjan Jovanovic * software distributed under the License is distributed on an 15*8a106958SDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*8a106958SDamjan Jovanovic * KIND, either express or implied. See the License for the 17*8a106958SDamjan Jovanovic * specific language governing permissions and limitations 18*8a106958SDamjan Jovanovic * under the License. 19*8a106958SDamjan Jovanovic * 20*8a106958SDamjan Jovanovic *************************************************************/ 21*8a106958SDamjan Jovanovic 22*8a106958SDamjan Jovanovic 23*8a106958SDamjan Jovanovic 24*8a106958SDamjan Jovanovic #ifndef CSV_CSV_ENV_HXX 25*8a106958SDamjan Jovanovic #define CSV_CSV_ENV_HXX 26*8a106958SDamjan Jovanovic 27*8a106958SDamjan Jovanovic 28*8a106958SDamjan Jovanovic 29*8a106958SDamjan Jovanovic //******* Include c-language-types ************// 30*8a106958SDamjan Jovanovic // size_t, wchar_t 31*8a106958SDamjan Jovanovic #include <stdlib.h> 32*8a106958SDamjan Jovanovic 33*8a106958SDamjan Jovanovic 34*8a106958SDamjan Jovanovic 35*8a106958SDamjan Jovanovic //******* Builtin types of exact length ************// 36*8a106958SDamjan Jovanovic 37*8a106958SDamjan Jovanovic // Exact length builtin types 38*8a106958SDamjan Jovanovic typedef signed char INT8; 39*8a106958SDamjan Jovanovic typedef unsigned char UINT8; 40*8a106958SDamjan Jovanovic typedef short INT16; 41*8a106958SDamjan Jovanovic typedef unsigned short UINT16; 42*8a106958SDamjan Jovanovic typedef long INT32; 43*8a106958SDamjan Jovanovic typedef unsigned long UINT32; 44*8a106958SDamjan Jovanovic typedef float REAL32; 45*8a106958SDamjan Jovanovic typedef double REAL64; 46*8a106958SDamjan Jovanovic 47*8a106958SDamjan Jovanovic 48*8a106958SDamjan Jovanovic // Additional builtin types 49*8a106958SDamjan Jovanovic typedef INT32 intt; // standard sized integer. 50*8a106958SDamjan Jovanovic typedef UINT32 uintt; // standard sized unsigned integer. 51*8a106958SDamjan Jovanovic typedef REAL64 real; // standard sized real. 52*8a106958SDamjan Jovanovic 53*8a106958SDamjan Jovanovic // Constants 54*8a106958SDamjan Jovanovic // --------- 55*8a106958SDamjan Jovanovic // Zero-pointer for use in ellipsed (...) parameter lists which expect a 56*8a106958SDamjan Jovanovic // pointer which may have another size than an int. 57*8a106958SDamjan Jovanovic // Must be a define to be used in precompiled headers: 58*8a106958SDamjan Jovanovic #define NIL ((void*)0) 59*8a106958SDamjan Jovanovic // char '\0' 60*8a106958SDamjan Jovanovic #define NULCH '\0' 61*8a106958SDamjan Jovanovic 62*8a106958SDamjan Jovanovic 63*8a106958SDamjan Jovanovic 64*8a106958SDamjan Jovanovic // Boolesche Operatoren 65*8a106958SDamjan Jovanovic #define AND && 66*8a106958SDamjan Jovanovic #define OR || 67*8a106958SDamjan Jovanovic #define NOT ! 68*8a106958SDamjan Jovanovic 69*8a106958SDamjan Jovanovic // Macro for distinguishing dynamic allocated pointers from 70*8a106958SDamjan Jovanovic // referencing pointers 71*8a106958SDamjan Jovanovic #define DYN // Exact specification: DYN has to be used if and only if: 72*8a106958SDamjan Jovanovic // 1. DYN specifies a class member pointer or reference variable and 73*8a106958SDamjan Jovanovic // the class must free the referenced memory. 74*8a106958SDamjan Jovanovic // 2. DYN specifies a pointer or reference (return-) parameter of a function 75*8a106958SDamjan Jovanovic // and for in-parameters the function or its class 76*8a106958SDamjan Jovanovic // must free the referenced memory, the parameter is then called 77*8a106958SDamjan Jovanovic // a let-parameter. 78*8a106958SDamjan Jovanovic // For out- and inout-parameters 79*8a106958SDamjan Jovanovic // or return values the caller of the function hast to 80*8a106958SDamjan Jovanovic // free the referenced memory. 81*8a106958SDamjan Jovanovic // 82*8a106958SDamjan Jovanovic // It is irrelevant who allocated the memory! 83*8a106958SDamjan Jovanovic // 84*8a106958SDamjan Jovanovic // DYN - variables use the prefixes "dp" or "dr" instead of "p" or "r". 85*8a106958SDamjan Jovanovic 86*8a106958SDamjan Jovanovic 87*8a106958SDamjan Jovanovic //****** Assertions ******// 88*8a106958SDamjan Jovanovic 89*8a106958SDamjan Jovanovic namespace csv 90*8a106958SDamjan Jovanovic { 91*8a106958SDamjan Jovanovic void PerformAssertion( 92*8a106958SDamjan Jovanovic const char * condition, 93*8a106958SDamjan Jovanovic const char * file, 94*8a106958SDamjan Jovanovic unsigned line ); 95*8a106958SDamjan Jovanovic } 96*8a106958SDamjan Jovanovic 97*8a106958SDamjan Jovanovic // Programming by contract 98*8a106958SDamjan Jovanovic #ifndef CSV_NO_ASSERTIONS 99*8a106958SDamjan Jovanovic 100*8a106958SDamjan Jovanovic #ifdef CSV_USE_CSV_ASSERTIONS 101*8a106958SDamjan Jovanovic #define csv_assert(x) ( (x) ? (void)(0) : ::csv::PerformAssertion( #x, __FILE__, __LINE__) ) 102*8a106958SDamjan Jovanovic #else 103*8a106958SDamjan Jovanovic 104*8a106958SDamjan Jovanovic // Save NDEBUG state 105*8a106958SDamjan Jovanovic #ifdef NDEBUG 106*8a106958SDamjan Jovanovic #define CSV_CSV_ENV_HXX_HAD_NDEBUG 107*8a106958SDamjan Jovanovic #undef NDEBUG 108*8a106958SDamjan Jovanovic #endif 109*8a106958SDamjan Jovanovic 110*8a106958SDamjan Jovanovic #if OSL_DEBUG_LEVEL == 0 111*8a106958SDamjan Jovanovic #define NDEBUG 112*8a106958SDamjan Jovanovic #endif 113*8a106958SDamjan Jovanovic #include <assert.h> 114*8a106958SDamjan Jovanovic 115*8a106958SDamjan Jovanovic #define csv_assert(x) assert(x); 116*8a106958SDamjan Jovanovic 117*8a106958SDamjan Jovanovic // Restore NDEBUG state 118*8a106958SDamjan Jovanovic #ifdef CSV_CSV_ENV_HXX_HAD_NDEBUG 119*8a106958SDamjan Jovanovic #define NDEBUG 120*8a106958SDamjan Jovanovic #else 121*8a106958SDamjan Jovanovic #undef NDEBUG 122*8a106958SDamjan Jovanovic #endif 123*8a106958SDamjan Jovanovic 124*8a106958SDamjan Jovanovic #endif 125*8a106958SDamjan Jovanovic 126*8a106958SDamjan Jovanovic #else // #ifndef CSV_NO_ASSERTIONS else 127*8a106958SDamjan Jovanovic 128*8a106958SDamjan Jovanovic #define csv_assert(x) 129*8a106958SDamjan Jovanovic 130*8a106958SDamjan Jovanovic #endif // end ifndef CSV_NO_ASSERTIONS else 131*8a106958SDamjan Jovanovic 132*8a106958SDamjan Jovanovic 133*8a106958SDamjan Jovanovic 134*8a106958SDamjan Jovanovic /* Additional Programming Conventions 135*8a106958SDamjan Jovanovic 136*8a106958SDamjan Jovanovic 1. see above at "#define DYN" 137*8a106958SDamjan Jovanovic 2. function parameters get one of these prefixes: 138*8a106958SDamjan Jovanovic - i_ := Function uses only the value, but must not change a referenced variable. 139*8a106958SDamjan Jovanovic - o_ := Parameter is undefined until function has set it. 140*8a106958SDamjan Jovanovic Parametere must be set by the function. 141*8a106958SDamjan Jovanovic - io_ := Function may use and change the referenced variable. 142*8a106958SDamjan Jovanovic - pass_ := Funktion may use and change the referenced variable and HAS TO free the 143*8a106958SDamjan Jovanovic associated memory. 144*8a106958SDamjan Jovanovic 3. Global constants get the prefix 'C_', global variables the prefix 'G_'. 145*8a106958SDamjan Jovanovic 4. Static members end with an underscore '_'. 146*8a106958SDamjan Jovanovic 147*8a106958SDamjan Jovanovic */ 148*8a106958SDamjan Jovanovic 149*8a106958SDamjan Jovanovic 150*8a106958SDamjan Jovanovic #endif 151