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