blob: 8e44b32f6fb6a23a56ac3dd3bbbf67c40caca859 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef CSV_CSV_ENV_HXX
#define CSV_CSV_ENV_HXX
//******* Include c-language-types ************//
// size_t, wchar_t
#include <stdlib.h>
//******* Builtin types of exact length ************//
// Exact length builtin types
typedef signed char INT8;
typedef unsigned char UINT8;
typedef short INT16;
typedef unsigned short UINT16;
typedef long INT32;
typedef unsigned long UINT32;
typedef float REAL32;
typedef double REAL64;
// Additional builtin types
typedef INT32 intt; // standard sized integer.
typedef UINT32 uintt; // standard sized unsigned integer.
typedef REAL64 real; // standard sized real.
// Constants
// ---------
// Zero-pointer for use in ellipsed (...) parameter lists which expect a
// pointer which may have another size than an int.
// Must be a define to be used in precompiled headers:
#define NIL ((void*)0)
// char '\0'
#define NULCH '\0'
// Boolesche Operatoren
#define AND &&
#define OR ||
#define NOT !
// Macro for distinguishing dynamic allocated pointers from
// referencing pointers
#define DYN // Exact specification: DYN has to be used if and only if:
// 1. DYN specifies a class member pointer or reference variable and
// the class must free the referenced memory.
// 2. DYN specifies a pointer or reference (return-) parameter of a function
// and for in-parameters the function or its class
// must free the referenced memory, the parameter is then called
// a let-parameter.
// For out- and inout-parameters
// or return values the caller of the function hast to
// free the referenced memory.
//
// It is irrelevant who allocated the memory!
//
// DYN - variables use the prefixes "dp" or "dr" instead of "p" or "r".
//****** Assertions ******//
namespace csv
{
void PerformAssertion(
const char * condition,
const char * file,
unsigned line );
}
// Programming by contract
#ifndef CSV_NO_ASSERTIONS
#ifdef CSV_USE_CSV_ASSERTIONS
#define csv_assert(x) ( (x) ? (void)(0) : ::csv::PerformAssertion( #x, __FILE__, __LINE__) )
#else
// Save NDEBUG state
#ifdef NDEBUG
#define CSV_CSV_ENV_HXX_HAD_NDEBUG
#undef NDEBUG
#endif
#if OSL_DEBUG_LEVEL == 0
#define NDEBUG
#endif
#include <assert.h>
#define csv_assert(x) assert(x);
// Restore NDEBUG state
#ifdef CSV_CSV_ENV_HXX_HAD_NDEBUG
#define NDEBUG
#else
#undef NDEBUG
#endif
#endif
#else // #ifndef CSV_NO_ASSERTIONS else
#define csv_assert(x)
#endif // end ifndef CSV_NO_ASSERTIONS else
/* Additional Programming Conventions
1. see above at "#define DYN"
2. function parameters get one of these prefixes:
- i_ := Function uses only the value, but must not change a referenced variable.
- o_ := Parameter is undefined until function has set it.
Parametere must be set by the function.
- io_ := Function may use and change the referenced variable.
- pass_ := Funktion may use and change the referenced variable and HAS TO free the
associated memory.
3. Global constants get the prefix 'C_', global variables the prefix 'G_'.
4. Static members end with an underscore '_'.
*/
#endif