• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 // -*- c++ -*-
19 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
20 
21 //               O S C L B A S E _ M A C R O S
22 
23 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
24 
25 /*! \addtogroup osclbase OSCL Base
26  *
27  * @{
28  */
29 
30 
31 /*! \file oscl_base_macros.h
32     \brief This file defines common macros and constants for basic compilation support.
33 */
34 
35 #ifndef OSCL_BASE_MACROS_H_INCLUDED
36 #define OSCL_BASE_MACROS_H_INCLUDED
37 
38 // Pick up any platform-specific definitions for the common
39 // macros.
40 #include "osclconfig.h"
41 
42 // Define default values for the common macros
43 #ifndef OSCL_EXPORT_REF
44 #define OSCL_EXPORT_REF
45 #endif
46 
47 #ifndef OSCL_IMPORT_REF
48 #define OSCL_IMPORT_REF
49 #endif
50 
51 //! The NULL_TERM_CHAR is used to terminate c-style strings.
52 //static const char NULL_TERM_CHAR = '\0';
53 #ifndef NULL_TERM_CHAR
54 #define NULL_TERM_CHAR '\0'
55 #endif
56 
57 //! if the NULL macro isn't already defined, then define it as zero.
58 #ifndef NULL
59 #define NULL (0)
60 #endif
61 
62 #if (OSCL_DISABLE_INLINES)
63 #define OSCL_INLINE
64 #define OSCL_COND_EXPORT_REF OSCL_EXPORT_REF
65 #define OSCL_COND_IMPORT_REF OSCL_IMPORT_REF
66 #else
67 #define OSCL_INLINE inline
68 #define OSCL_COND_EXPORT_REF
69 #define OSCL_COND_IMPORT_REF
70 #endif
71 
72 //this macro may not be defined in all configurations
73 //so a default is defined here.
74 
75 //! Type casting macros
76 /*!
77   \param type   Destination type of cast
78   \param exp    Expression to cast
79 */
80 
81 #define OSCL_CONST_CAST(type,exp)           ((type)(exp))
82 #define OSCL_STATIC_CAST(type,exp)          ((type)(exp))
83 #define OSCL_REINTERPRET_CAST(type,exp)     ((type)(exp))
84 #define OSCL_DYNAMIC_CAST(type, exp)        ((type)(exp))
85 
86 
87 /**
88  * The following two macros are used to avoid compiler warnings.
89  *
90  * OSCL_UNUSED_ARG(vbl) is used to "reference" an otherwise unused
91  *   parameter or variable, often one which is used only in an
92  *   OSCL_ASSERT and thus unreferenced in release mode
93  * OSCL_UNUSED_RETURN(val) provides a "return" of a value, in places
94  *   which will not actually be executed, such as after an
95  *   OSCL_LEAVE or Thread::exit or abort.  The value needs to
96  *   be of an appropriate type for the current function, though
97  *   zero will usually suffice.  Note that OSCL_UNUSED_RETURN
98  *   will not be necessary for 'void' functions, as there is no
99  *   requirement for a value-return operation.
100  */
101 #define OSCL_UNUSED_ARG(vbl) (void)(vbl)
102 #define OSCL_UNUSED_RETURN(value) return value
103 
104 /* The __TFS__ macro is used to optionally expand to "<>" depending on the
105  * compiler.  Some compilers require it to indicate that the friend function
106  * is a template function as specified in the standard, but others don't
107  * like it so it will handled with a macro expansion that depends on the
108  * compiler.
109  */
110 #ifndef __TFS__
111 #define __TFS__
112 #endif
113 
114 #define OSCL_MIN(a,b) ((a) < (b) ? (a) : (b))
115 #define OSCL_MAX(a,b) ((a) > (b) ? (a) : (b))
116 #define OSCL_ABS(a) ((a) > (0) ? (a) : -(a))
117 
118 // the syntax for explicitly calling the destructor varies on some platforms
119 // below is the default syntax as defined in the C++ standard
120 #ifndef OSCL_TEMPLATED_DESTRUCTOR_CALL
121 #define OSCL_TEMPLATED_DESTRUCTOR_CALL(type,simple_type) type :: ~simple_type ()
122 #endif
123 
124 
125 /*
126  * The OSCL_UNSIGNED_CONST macro is used to optionally add a suffix to the
127  * end of integer constants to identify them as unsigned constants.  It is
128  * usually only necessary to do that for very large constants that are too
129  * big to fit within the range of a signed integer. Some compilers will issue
130  * warnings for that.  The default behavior will be to add no suffix.
131  */
132 
133 #ifndef OSCL_UNSIGNED_CONST
134 #define OSCL_UNSIGNED_CONST(x) x
135 #endif
136 
137 /*
138  * These macros are used by MTP to avoid byte aligning structures.
139  */
140 #ifndef OSCL_PACKED_VAR
141 #define OSCL_PACKED_VAR     "error"
142 #endif
143 
144 #ifndef OSCL_BEGIN_PACKED
145 #define OSCL_BEGIN_PACKED   "error"
146 #endif
147 
148 #ifndef OSCL_END_PACKED
149 #define OSCL_END_PACKED     "error"
150 #endif
151 
152 /*! @} */
153 
154 #endif  // OSCL_BASE_MACROS_H_INCLUDED
155