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