source: NonGTP/FCollada/FUtils/FUtils.h @ 964

Revision 964, 3.9 KB checked in by igarcia, 18 years ago (diff)
Line 
1/*
2        Copyright (C) 2005-2006 Feeling Software Inc.
3        MIT License: http://www.opensource.org/licenses/mit-license.php
4*/
5/*
6        Based on the FS Import classes:
7        Copyright (C) 2005-2006 Feeling Software Inc
8        Copyright (C) 2005-2006 Autodesk Media Entertainment
9        MIT License: http://www.opensource.org/licenses/mit-license.php
10*/
11
12/**
13        @file FUtils.h
14        Includes the common utilities classes and macros.
15*/
16
17/** @defgroup FUtils Utility Classes. */
18
19#ifndef _F_UTILS_H_
20#define _F_UTILS_H_
21
22// STL
23#ifdef _WIN32
24#pragma warning(disable:4702)
25#endif
26#include <string>
27#include <vector>
28#include <set>
29#include <xtree>
30#include <map>
31#include <algorithm>
32#ifdef _WIN32
33#pragma warning(default:4702)
34#endif
35
36// Pre-include the platform-specific macros and definitions
37#include "FUtils/Platforms.h"
38#include "FUtils/FUAssert.h"
39
40// PLUG_CRT enforces CRT memory checks every 128 allocations
41// and CRT memory leaks output
42#if defined(_DEBUG) && defined(WIN32) && defined(MEMORY_DEBUG)
43#define PLUG_CRT
44#ifdef PLUG_CRT
45#include <crtdbg.h>
46#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
47#define new DEBUG_CLIENTBLOCK
48#endif // PLUG_CRT
49#endif // _DEBUG & WIN32 & MEMORY_DEBUG
50
51// FMath
52#define HAS_VECTORTYPES /**< Used by FCollada, this #define implies that we are including all the common dynamically-sized arrays. */
53#include "FMath/FMath.h"
54
55// LibXML
56#ifndef NO_LIBXML
57#define HAS_LIBXML /**< Used by FCollada, this #define implies that we are including LibXML functions in the library interface. */
58#define LIBXML_STATIC /**< Used by LibXML, this #define implies that we are statically-linking the LibXML. */
59#include <libxml/tree.h>
60#else
61typedef struct _xmlNode xmlNode;
62#endif
63typedef vector<struct _xmlNode*> xmlNodeList; /**< A dynamically-sized array of XML nodes. */
64
65// SAFE_DELETE Macro set.
66#define SAFE_DELETE(ptr) if ((ptr) != NULL) { delete (ptr); (ptr) = NULL; } /**< This macro safely deletes a pointer and sets the given pointer to NULL. */
67#define SAFE_DELETE_ARRAY(ptr) if (ptr != NULL) { delete [] ptr; ptr = NULL; } /**< This macro safely deletes an heap array and sets the given pointer to NULL. */
68#define SAFE_FREE(ptr) if (ptr != NULL) { free(ptr); ptr = NULL; } /**< This macro safely frees a memory block and sets the given pointer to NULL. */
69#define SAFE_RELEASE(ptr) if ((ptr) != NULL) { (ptr)->Release(); (ptr) = NULL; } /**< This macro safely releases an interface and sets the given pointer to NULL. */
70#define CLEAR_POINTER_VECTOR(a) { size_t l = (a).size(); for (size_t i = 0; i < l; ++i) SAFE_DELETE((a)[i]); (a).clear(); } /**< This macro deletes all the object pointers contained within a vector and clears it. */
71#define CLEAR_POINTER_MAP(mapT, a) { for (mapT::iterator it = (a).begin(); it != (a).end(); ++it) SAFE_DELETE((*it).second); (a).clear(); } /**< This macro deletes all the object pointers contained within a map and clears it. */
72
73// Conversion macros
74#define UNUSED(a) /**< Removes a piece of code during the pre-process. This macro is useful for these pesky unused variable warnings. */
75#ifdef _DEBUG
76#define UNUSED_NDEBUG(a) a
77#else
78#define UNUSED_NDEBUG(a) /**< Removes a piece of debug code during the pre-process. This macro is useful for these pesky unused variable warnings. */
79#endif // _DEBUG
80
81#undef min
82#define min(a, b) std::min(a, b) /**< Retrieves the smallest of two values. */
83#undef max
84#define max(a, b) std::max(a, b) /**< Retrieves the largest of two values. */
85
86// More complex utility classes
87#include "FUtils/FUString.h"
88#include "FUtils/FUCrc32.h"
89#include "FUtils/FUDebug.h"
90#include "FUtils/FUStatus.h"
91
92/** Retrieves whether two values are equivalent.
93        This template simply calls the operator== on the two values.
94        @param v1 A first value.
95        @param v2 A second value.
96        @return Whether the two values are equivalent. */
97template <class T>
98bool IsEquivalent(const T& v1, const T& v2) { return v1 == v2; }
99
100#endif // _F_UTILS_H_
Note: See TracBrowser for help on using the repository browser.