Home | History | Annotate | Download | only in src
      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