Synesis Software STLSoft - ... Robust, Lightweight, Cross-platform, Template Software ...

pantheios/pantheios.h

Go to the documentation of this file.
00001 /* /////////////////////////////////////////////////////////////////////////
00002  * File:        pantheios/pantheios.h
00003  *
00004  * Purpose:     Pantheios Core and Util APIs.
00005  *
00006  * Created:     21st June 2005
00007  * Updated:     6th August 2012
00008  *
00009  * Home:        http://www.pantheios.org/
00010  *
00011  * Copyright (c) 2005-2012, Matthew Wilson and Synesis Software
00012  * Copyright (c) 1999-2005, Synesis Software and Matthew Wilson
00013  * All rights reserved.
00014  *
00015  * Redistribution and use in source and binary forms, with or without
00016  * modification, are permitted provided that the following conditions are
00017  * met:
00018  *
00019  * - Redistributions of source code must retain the above copyright notice,
00020  *   this list of conditions and the following disclaimer.
00021  * - Redistributions in binary form must reproduce the above copyright
00022  *   notice, this list of conditions and the following disclaimer in the
00023  *   documentation and/or other materials provided with the distribution.
00024  * - Neither the name(s) of Matthew Wilson and Synesis Software nor the
00025  *   names of any contributors may be used to endorse or promote products
00026  *   derived from this software without specific prior written permission.
00027  *
00028  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00029  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
00030  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00031  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
00032  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00033  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00034  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00035  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00036  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00037  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00038  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00039  *
00040  * ////////////////////////////////////////////////////////////////////// */
00041 
00042 
00049 #ifndef PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS
00050 #define PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS
00051 
00052 /* /////////////////////////////////////////////////////////////////////////
00053  * Version information
00054  */
00055 
00056 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00057 # define PANTHEIOS_VER_PANTHEIOS_H_PANTHEIOS_MAJOR      3
00058 # define PANTHEIOS_VER_PANTHEIOS_H_PANTHEIOS_MINOR      46
00059 # define PANTHEIOS_VER_PANTHEIOS_H_PANTHEIOS_REVISION   1
00060 # define PANTHEIOS_VER_PANTHEIOS_H_PANTHEIOS_EDIT       350
00061 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00062 
00079 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00080 # define PANTHEIOS_VER_1_0_1_B2                 0x01000102
00081 # define PANTHEIOS_VER_1_0_1_B193               0x010001c1
00082 # define PANTHEIOS_VER_1_0_1_B194               0x010001c2
00083 # define PANTHEIOS_VER_1_0_1_B195               0x010001c3
00084 # define PANTHEIOS_VER_1_0_1_B196               0x010001c4
00085 # define PANTHEIOS_VER_1_0_1_B197               0x010001c5
00086 # define PANTHEIOS_VER_1_0_1_B198               0x010001c6
00087 # define PANTHEIOS_VER_1_0_1_B199               0x010001c7
00088 # define PANTHEIOS_VER_1_0_1_B200               0x010001c8
00089 # define PANTHEIOS_VER_1_0_1_B201               0x010001c9
00090 # define PANTHEIOS_VER_1_0_1_B202               0x010001ca
00091 # define PANTHEIOS_VER_1_0_1_B203               0x010001cb
00092 # define PANTHEIOS_VER_1_0_1_B204               0x010001cc
00093 # define PANTHEIOS_VER_1_0_1_B205               0x010001cd
00094 # define PANTHEIOS_VER_1_0_1_B206               0x010001ce
00095 # define PANTHEIOS_VER_1_0_1_B207               0x010001cf
00096 # define PANTHEIOS_VER_1_0_1_B208               0x010001d0
00097 # define PANTHEIOS_VER_1_0_1_B209               0x010001d1
00098 # define PANTHEIOS_VER_1_0_1_B210               0x010001d2
00099 # define PANTHEIOS_VER_1_0_1_B211               0x010001d3
00100 # define PANTHEIOS_VER_1_0_1_B212               0x010001d4
00101 # define PANTHEIOS_VER_1_0_1_B213               0x010001d5
00102 # define PANTHEIOS_VER_1_0_1_B214               0x010001d6
00103 # define PANTHEIOS_VER_1_0_1                    0x010001ff
00104 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00105 
00106 #define PANTHEIOS_VER_MAJOR                     1
00107 #define PANTHEIOS_VER_MINOR                     0
00108 #define PANTHEIOS_VER_REVISION                  1
00109 
00110 #define PANTHEIOS_VER                           PANTHEIOS_VER_1_0_1_B214
00111 
00112 /* /////////////////////////////////////////////////////////////////////////
00113  * Includes - 1
00114  */
00115 
00116 /* Pantheios core API relies on STLSoft for compiler/library discrimination,
00117  * and various fundamental types.
00118  */
00119 #ifndef STLSOFT_INCL_STLSOFT_H_STLSOFT
00120 # include <stlsoft/stlsoft.h>
00121 #endif /* !STLSOFT_INCL_STLSOFT_H_STLSOFT */
00122 
00123 #if !defined(_STLSOFT_VER) || \
00124     _STLSOFT_VER < 0x010973ff
00125 # error This version Pantheios requires STLSoft 1.9.115, or later. (www.stlsoft.org)
00126 #endif /* STLSoft version */
00127 
00128 #ifndef PANTHEIOS_INCL_H_STDARG
00129 # define PANTHEIOS_INCL_H_STDARG
00130 # include <stdarg.h>     /* for va_list */
00131 #endif /* !PANTHEIOS_INCL_H_STDARG */
00132 #ifndef PANTHEIOS_INCL_H_STDDEF
00133 # define PANTHEIOS_INCL_H_STDDEF
00134 # include <stddef.h>     /* for size_t */
00135 #endif /* !PANTHEIOS_INCL_H_STDDEF */
00136 
00137 /* /////////////////////////////////////////////////////////////////////////
00138  * Feature detection
00139  */
00140 
00141 /* By default, Pantheios is a multi-byte string library
00142  *
00143  * If you define \c PANTHEIOS_USE_WIDE_STRINGS, then it will be built in
00144  * wide string form.
00145  *
00146  * Also, if you are compiling for Windows (32-bit or 64-bit) and define
00147  * either \c _UNICODE or \c UNICODE, then \c PANTHEIOS_USE_WIDE_STRINGS will
00148  * be defined automatically.
00149  *
00150  * In either case, if you define \c PANTHEIOS_NO_USE_WIDE_STRINGS, then the
00151  * wide string support will be suppressed.
00152  */
00153 
00154 #ifndef PANTHEIOS_USE_WIDE_STRINGS
00155 # if defined(_WIN32) && \
00156      defined(UNICODE) && \
00157      defined(_UNICODE)
00158 #  define PANTHEIOS_USE_WIDE_STRINGS
00159 # endif /* _WIN32 && UNICODE && _UNICODE */
00160 #endif /* !PANTHEIOS_USE_WIDE_STRINGS */
00161 
00162 #ifdef PANTHEIOS_NO_USE_WIDE_STRINGS
00163 # ifdef PANTHEIOS_USE_WIDE_STRINGS
00164 #  undef PANTHEIOS_USE_WIDE_STRINGS
00165 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
00166 #endif /* PANTHEIOS_NO_USE_WIDE_STRINGS */
00167 
00168 /* /////////////////////////////////////////////////////////////////////////
00169  * Includes - 2
00170  */
00171 
00172 #ifdef PANTHEIOS_USE_WIDE_STRINGS
00173 # ifndef _WCHAR_T_DEFINED
00174 #  include <wchar.h>    /* for wchar_t (if not built-in) */
00175 # endif /* !_WCHAR_T_DEFINED */
00176 #endif /* PANTHEIOS_USE_WIDE_STRINGS */
00177 
00178 /* TODO: make this include relative */
00179 #include <pantheios/internal/string_encoding.h>
00180 
00181 /* /////////////////////////////////////////////////////////////////////////
00182  * Macros and definitions
00183  */
00184 
00194 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00195 # define PANTHEIOS_STRINGIZE_(x)    #x
00196 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00197 #define PANTHEIOS_STRINGIZE(x)      PANTHEIOS_STRINGIZE_(x)
00198 
00211 #define PANTHEIOS_MAKE_EXTENDED_SEVERITY(sev, xi28)     \
00212                                                         \
00213     (((sev) & 0x0f) | (((xi28) << 4) & ~0x0f))
00214 
00229 #define PANTHEIOS_CARG_STR(s)                               (s), (-1)
00230 
00246 #define PANTHEIOS_CARG_STR_LEN(s, n)                        (s), (n)
00247 
00305 #if !defined(PANTHEIOS_DECLSPEC)
00306 # define PANTHEIOS_DECLSPEC
00307 #endif /* !PANTHEIOS_DECLSPEC */
00308 
00309 #if defined(__cplusplus) || \
00310     defined(PANTHEIOS_DOCUMENTATION_SKIP_SECTION)
00311 # define PANTHEIOS_EXTERN_C            extern "C"
00312 #else /* ? __cplusplus */
00313 # define PANTHEIOS_EXTERN_C            extern
00314 #endif /* !__cplusplus */
00315 
00316 #if !defined(PANTHEIOS_CALLCONV)
00317 # define PANTHEIOS_CALLCONV
00318 #endif /* !PANTHEIOS_CALLCONV */
00319 
00320 #define PANTHEIOS_CALL(rt)             PANTHEIOS_DECLSPEC PANTHEIOS_EXTERN_C rt PANTHEIOS_CALLCONV
00321 
00322 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00323 # define PANTHEIOS_CPP_CALL(rt)        PANTHEIOS_DECLSPEC extern "C++" rt PANTHEIOS_CALLCONV
00324 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00325 
00326 #ifdef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00327 # define PANTHEIOS_DECLARE_DEPRECATION(symtype, oldfn, newfn)
00328 # define PANTHEIOS_CALL_DEPRECATED(rt, oldfn, newfn)            PANTHEIOS_CALL(rt)
00329 #else /* ? PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00330 # if defined(STLSOFT_COMPILER_IS_MSVC) && \
00331     (   _MSC_VER >= 1500 || \
00332         (   _MSC_VER >= 1400 && \
00333             defined(_MSC_FULL_VER) && \
00334             _MSC_FULL_VER >= 140050320))
00335 #  define PANTHEIOS_DECLARE_DEPRECATION(symtype, oldfn, newfn)  __declspec(deprecated("The " symtype " " PANTHEIOS_STRINGIZE(oldfn) " is deprecated and will be removed from a future version of Pantheios; use " PANTHEIOS_STRINGIZE(newfn) " instead"))
00336 #  define PANTHEIOS_CALL_DEPRECATED(rt, oldfn, newfn)           PANTHEIOS_DECLARE_DEPRECATION("function", oldfn, newfn) PANTHEIOS_DECLSPEC PANTHEIOS_EXTERN_C rt PANTHEIOS_CALLCONV
00337 # else /* ? compiler */
00338 #  define PANTHEIOS_DECLARE_DEPRECATION(symtype, oldfn, newfn)
00339 #  define PANTHEIOS_CALL_DEPRECATED(rt, oldfn, newfn)           PANTHEIOS_CALL(rt)
00340 # endif /* compiler */
00341 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00342 
00343 /* /////////////////////////////////////////////////////////////////////////
00344  * Namespace
00345  */
00346 
00347 #if defined(STLSOFT_CF_NAMESPACE_SUPPORT)
00348 # define PANTHEIOS_CF_NAMESPACE_SUPPORT
00349 #else /* STLSOFT_CF_NAMESPACE_SUPPORT */
00350 # ifdef PANTHEIOS_CF_NAMESPACE_SUPPORT
00351 #  undef PANTHEIOS_CF_NAMESPACE_SUPPORT
00352 # endif /* PANTHEIOS_CF_NAMESPACE_SUPPORT */
00353 #endif /* STLSOFT_CF_NAMESPACE_SUPPORT */
00354 
00355 #if !defined(PANTHEIOS_CF_NAMESPACE_SUPPORT) && \
00356     !defined(PANTHEIOS_DOCUMENTATION_SKIP_SECTION) && \
00357     !defined(PANTHEIOS_NO_NAMESPACE)
00358 # define PANTHEIOS_NO_NAMESPACE
00359 #endif /* __cplusplus, etc. */
00360 
00361 #if !defined(PANTHEIOS_NO_NAMESPACE)
00362 
00367 namespace pantheios
00368 {
00369 
00374 namespace util
00375 {
00376 } /* namespace util */
00377 
00382 namespace core
00383 {
00384 } /* namespace core */
00385 
00386 # define PANTHEIOS_NS_QUAL(x)           ::pantheios::x
00387 # define PANTHEIOS_SUBNS_QUAL(sns, x)   ::pantheios::sns::x
00388 
00389 #else /* ? !PANTHEIOS_NO_NAMESPACE */
00390 
00391 # define PANTHEIOS_NS_QUAL(x)           x
00392 # define PANTHEIOS_SUBNS_QUAL(sns, x)   x
00393 
00394 #endif /* !PANTHEIOS_NO_NAMESPACE */
00395 
00408 /* /////////////////////////////////////////////////////////////////////////
00409  * Types
00410  */
00411 
00412 /* Basic types */
00413 
00415 typedef stlsoft_ns_qual(ss_uint8_t)     pan_uint8_t;
00417 typedef stlsoft_ns_qual(ss_uint16_t)    pan_uint16_t;
00419 typedef stlsoft_ns_qual(ss_uint32_t)    pan_uint32_t;
00421 typedef stlsoft_ns_qual(ss_uint64_t)    pan_uint64_t;
00422 
00424 typedef stlsoft_ns_qual(ss_sint8_t)     pan_sint8_t;
00426 typedef stlsoft_ns_qual(ss_sint16_t)    pan_sint16_t;
00428 typedef stlsoft_ns_qual(ss_sint32_t)    pan_sint32_t;
00430 typedef stlsoft_ns_qual(ss_sint64_t)    pan_sint64_t;
00431 
00432 
00439 #ifdef PANTHEIOS_USE_WIDE_STRINGS
00440 typedef wchar_t     pan_char_t;
00441 #else /* ? PANTHEIOS_USE_WIDE_STRINGS */
00442 typedef char        pan_char_t;
00443 #endif /* PANTHEIOS_USE_WIDE_STRINGS */
00444 
00452 #define PAN_CHAR_T  PANTHEIOS_NS_QUAL(pan_char_t)
00453 
00465 struct pan_slice_t
00466 {
00467     size_t              len;    
00468     pan_char_t const*   ptr;    
00470 #ifdef __cplusplus
00471 
00472     pan_slice_t();
00474     pan_slice_t(pan_char_t const* p, size_t l);
00476     pan_slice_t(pan_slice_t const& rhs);
00478     pan_slice_t& operator =(pan_slice_t const& rhs);
00479 
00480 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00481 
00482     pan_slice_t(int len, pan_char_t const* p);
00483 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00484 
00485 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00486 
00491     static size_t   get_lazy_length(size_t fromLen, size_t toLen);
00492 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00493 
00494 private:
00495     static size_t   calc_length_n_(pan_char_t const* s, size_t len);
00496 
00497 #endif /* __cplusplus */
00498 };
00499 #if !defined(__cplusplus)
00500 typedef struct pan_slice_t  pan_slice_t;
00501 #endif /* !__cplusplus */
00502 
00503 
00504 #ifndef PANTHEIOS_NO_STOCK_LEVELS
00505 
00520 enum pan_severity_t
00521 {
00522         SEV_EMERGENCY       =   0   
00523     ,   SEV_ALERT           =   1   
00524     ,   SEV_CRITICAL        =   2   
00525     ,   SEV_ERROR           =   3   
00526     ,   SEV_WARNING         =   4   
00527     ,   SEV_NOTICE          =   5   
00528     ,   SEV_INFORMATIONAL   =   6   
00529     ,   SEV_DEBUG           =   7   
00531 # if defined(PANTHEIOS_NO_NAMESPACE)
00532     ,   PANTHEIOS_SEV_EMERGENCY         =   SEV_EMERGENCY
00533     ,   PANTHEIOS_SEV_ALERT             =   SEV_ALERT
00534     ,   PANTHEIOS_SEV_CRITICAL          =   SEV_CRITICAL
00535     ,   PANTHEIOS_SEV_ERROR             =   SEV_ERROR
00536     ,   PANTHEIOS_SEV_WARNING           =   SEV_WARNING
00537     ,   PANTHEIOS_SEV_NOTICE            =   SEV_NOTICE
00538     ,   PANTHEIOS_SEV_INFORMATIONAL     =   SEV_INFORMATIONAL
00539     ,   PANTHEIOS_SEV_DEBUG             =   SEV_DEBUG
00540 # endif /* PANTHEIOS_NO_NAMESPACE */
00541 
00542 };
00543 # if !defined(__cplusplus)
00544 typedef enum pan_severity_t pan_severity_t;
00545 # endif /* !__cplusplus */
00546 #endif /* !PANTHEIOS_NO_STOCK_LEVELS */
00547 
00554 typedef stlsoft_ns_qual(ss_sint32_t)    pan_sev_t;
00555 
00556 #if defined(__cplusplus) && \
00557     !defined(PANTHEIOS_NO_STOCK_LEVELS) && \
00558     !defined(PANTHEIOS_DOCUMENTATION_SKIP_SECTION)
00559 # define PANTHEIOS_INCLUDING_STOCKLEVELS
00560 # include "./internal/stock_levels.hpp"    /* Stock/custom level type */
00561 # undef PANTHEIOS_INCLUDING_STOCKLEVELS
00562 
00563 #endif /* __cplusplus */
00564 
00565 /* /////////////////////////////////////////////////////////////////////////
00566  * API
00567  */
00568 
00585 PANTHEIOS_CALL(pan_uint32_t) pantheios_getVersion(void);
00586 
00608 PANTHEIOS_CALL(int) pantheios_init(void);
00609 
00629 PANTHEIOS_CALL(void) pantheios_uninit(void);
00630 
00647 PANTHEIOS_CALL(int) pantheios_isSeverityLogged(pan_sev_t severity);
00648 
00649 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00650 
00661 PANTHEIOS_CALL(pan_char_t const*) pantheios_getProcessIdentity(void);
00662 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00663 
00674 PANTHEIOS_CALL(pan_char_t const*) pantheios_getStockSeverityString(pan_sev_t severity);
00675 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00676 PANTHEIOS_CALL_DEPRECATED(pan_char_t const*, pantheios_getSeverityString, pantheios_getStockSeverityString) pantheios_getSeverityString(pan_sev_t severity);
00677 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00678 
00688 PANTHEIOS_CALL(size_t) pantheios_getStockSeverityStringLength(pan_sev_t severity);
00689 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00690 PANTHEIOS_CALL_DEPRECATED(size_t, pantheios_getSeverityStringLength, pantheios_getStockSeverityStringLength) pantheios_getSeverityStringLength(pan_sev_t severity);
00691 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00692 
00702 PANTHEIOS_CALL(char const*) pantheios_getInitCodeString(int code);
00703 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00704 PANTHEIOS_CALL_DEPRECATED(char const*, pantheios_getInitErrorString, pantheios_getInitCodeString) pantheios_getInitErrorString(int code);
00705 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00706 
00714 PANTHEIOS_CALL(size_t) pantheios_getInitCodeStringLength(int code);
00715 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00716 PANTHEIOS_CALL_DEPRECATED(size_t, pantheios_getInitErrorStringLength, pantheios_getInitCodeStringLength) pantheios_getInitErrorStringLength(int code);
00717 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00718 
00719 #if !defined(PANTHEIOS_NO_NAMESPACE)
00720 namespace core
00721 {
00722 #endif /* !PANTHEIOS_NO_NAMESPACE */
00723 
00737 PANTHEIOS_CALL(int) pantheios_log_n(
00738     pan_sev_t                       severity
00739 ,   size_t                          numSlices
00740 #ifdef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00741 ,   pantheios::pan_slice_t const*   slices
00742 #else /* ? PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00743 ,   pan_slice_t const*              slices
00744 #endif /* PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00745 );
00746 
00747 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00748 # define PANTHEIOS_INCLUDING_C_API_FUNCTIONS
00749 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00750 #include "./internal/generated/log_functions.h"    /* pantheios_log_1() (pantheios::log_1()), etc.  */
00751 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00752 # undef PANTHEIOS_INCLUDING_C_API_FUNCTIONS
00753 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00754 
00755 #if !defined(PANTHEIOS_NO_NAMESPACE)
00756 } /* namespace core */
00757 #endif /* !PANTHEIOS_NO_NAMESPACE */
00758 
00771 PANTHEIOS_CALL(int) pantheios_logprintf(
00772     pan_sev_t           severity
00773 ,   pan_char_t const*   format
00774 ,   ...
00775 )
00776 #if defined(STLSOFT_COMPILER_IS_GCC) /* TODO: Change this to proper discriminated feature */
00777 __attribute__((format(printf,2,3)))
00778 #endif /* compiler */
00779 ;
00780 
00797 PANTHEIOS_CALL(int) pantheios_logvprintf(
00798     pan_sev_t           severity
00799 ,   pan_char_t const*   format
00800 ,   va_list             args
00801 );
00802 
00803 /* /////////////////////////////////////////////////////////////////////////
00804  * Utility functions
00805  */
00806 
00807 #if !defined(PANTHEIOS_NO_NAMESPACE)
00808 namespace util
00809 {
00810 #endif /* !PANTHEIOS_NO_NAMESPACE */
00811 
00839 PANTHEIOS_CALL(void) pantheios_onBailOut4(
00840     int           severity
00841 ,   char const*   message
00842 ,   char const*   processId
00843 ,   char const*   qualifier
00844 );
00845 
00873 PANTHEIOS_CALL(void) pantheios_onBailOut3(
00874     int           severity
00875 ,   char const*   message
00876 ,   char const*   processId
00877 );
00878 
00879 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00880 
00887 PANTHEIOS_CALL(size_t) pantheios_util_strnlen(pan_char_t const* s, size_t len);
00888 PANTHEIOS_CALL_DEPRECATED(size_t, pantheios_strnlen, pantheios_util_strnlen) pantheios_strnlen(pan_char_t const* s, size_t len);
00889 
00890 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00891 
00892 #if !defined(PANTHEIOS_NO_NAMESPACE)
00893 } /* namespace util */
00894 #endif /* !PANTHEIOS_NO_NAMESPACE */
00895 
00896 /* /////////////////////////////////////////////////////////////////////////
00897  * Core functions
00898  */
00899 
00900 #if !defined(PANTHEIOS_NO_NAMESPACE)
00901 namespace core
00902 {
00903 #endif /* !PANTHEIOS_NO_NAMESPACE */
00904 
00905 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00906 /* /////////////////////////////////////
00907  * Undocumented API functions
00908  *
00909  * ALL OF THE FUNCTIONS IN THIS SECTION ARE NOT PART OF THE PUBLICLY
00910  * DOCUMENTED API OF PANTHEIOS, AND ARE SUBJECT TO REMOVAL/CHANGE IN A
00911  * FUTURE RELEASE.
00912  */
00913 
00920 PANTHEIOS_CALL(int)     pantheios_isInitialising(void);
00927 PANTHEIOS_CALL(int)     pantheios_isInitialised(void);
00937 #  if defined(STLSOFT_COMPILER_IS_MSVC)
00938 __declspec(noreturn)
00939 #  endif /* compiler */
00940 PANTHEIOS_CALL(void)    pantheios_exitProcess(int code)
00941 #  if defined(STLSOFT_COMPILER_IS_GCC)
00942 __attribute__((noreturn))
00943 #  endif /* compiler */
00944 ;
00950 PANTHEIOS_CALL_DEPRECATED(void, pantheios_exit_process, pantheios_exitProcess) pantheios_exit_process(int code);
00951 
00964 PANTHEIOS_CALL(void*)   pantheios_malloc(size_t cb);
00965 
00966 /* Memory allocation/deallocation for inserter memory blocks */
00967 
00979 PANTHEIOS_CALL(void*)   pantheios_inserterAllocate(size_t cb);
00985 PANTHEIOS_CALL(void)    pantheios_inserterDeallocate(void* pv);
00986 
01004 PANTHEIOS_CALL(pan_char_t const*) pantheios_getPad(size_t minimumWidth, size_t* actualWidth);
01005 
01006 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01007 
01008 #if !defined(PANTHEIOS_NO_NAMESPACE)
01009 } /* namespace core */
01010 #endif /* !PANTHEIOS_NO_NAMESPACE */
01011 
01012 /* /////////////////////////////////////////////////////////////////////////
01013  * Core functions
01014  */
01015 
01016 #if !defined(PANTHEIOS_NO_NAMESPACE)
01017 namespace core
01018 {
01019 #endif /* !PANTHEIOS_NO_NAMESPACE */
01020 
01038 PANTHEIOS_CALL(int) pantheios_getNextBackEndId(void);
01039 
01040 #if !defined(PANTHEIOS_NO_NAMESPACE)
01041 } /* namespace core */
01042 #endif /* !PANTHEIOS_NO_NAMESPACE */
01043 
01057 PANTHEIOS_CALL(void) pantheios_logputs(
01058     pan_sev_t           severity
01059 ,   pan_char_t const*   message
01060 );
01061 
01070 PANTHEIOS_CALL_DEPRECATED(void, pantheios_puts, pantheios_logputs) pantheios_puts(pan_sev_t severity, pan_char_t const* message);
01071 
01072 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
01073 PANTHEIOS_CALL(void) pantheios_logassertfail(
01074     pan_sev_t   severity
01075 ,   char const* fileLine
01076 ,   char const* message
01077 );
01078 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01079 
01080 /* /////////////////////////////////////////////////////////////////////////
01081  * Back-end map functions
01082  */
01083 
01084 #if 0 /* Not yet released */
01085 
01102 PANTHEIOS_CALL(int) pantheios_backEndMap_lookup(int backEndId, void** ptoken);
01103 
01116 PANTHEIOS_CALL(int) pantheios_backEndMap_add(int backEndId, void* token);
01117 
01129 PANTHEIOS_CALL(int) pantheios_backEndMap_remove(int backEndId);
01130 #endif /* 0 */
01131 
01132 /* /////////////////////////////////////////////////////////////////////////
01133  * Generated function control
01134  */
01135 
01136 #if defined(PANTHEIOS_DOCUMENTATION_SKIP_SECTION) || \
01137     !defined(PANTHEIOS_APPL_PARAMS_LIMIT)
01138 
01144 # define PANTHEIOS_APPL_PARAMS_LIMIT    PANTHEIOS_APPL_PARAMS_LIMIT_MAX_GENERATED
01145 #endif /* PANTHEIOS_DOCUMENTATION_SKIP_SECTION || !PANTHEIOS_APPL_PARAMS_LIMIT */
01146 
01147 /* Sanity check on PANTHEIOS_APPL_PARAMS_LIMIT */
01148 #if PANTHEIOS_APPL_PARAMS_LIMIT < 0 || \
01149     PANTHEIOS_APPL_PARAMS_LIMIT > PANTHEIOS_APPL_PARAMS_LIMIT_MAX_GENERATED
01150 # error PANTHEIOS_APPL_PARAMS_LIMIT Must be defined to be a number between 1 and PANTHEIOS_APPL_PARAMS_LIMIT_MAX_GENERATED
01151 #endif /* PANTHEIOS_APPL_PARAMS_LIMIT */
01152 
01153 /* /////////////////////////////////////////////////////////////////////////
01154  * API functions for C++
01155  */
01156 
01157 #if !defined(PANTHEIOS_NO_NAMESPACE)
01158 
01160 typedef pan_uint8_t     uint8_t;
01162 typedef pan_uint16_t    uint16_t;
01164 typedef pan_uint32_t    uint32_t;
01166 typedef pan_uint64_t    uint64_t;
01167 
01169 typedef pan_sint8_t     sint8_t;
01171 typedef pan_sint16_t    sint16_t;
01173 typedef pan_sint32_t    sint32_t;
01175 typedef pan_sint64_t    sint64_t;
01176 
01177 /* /////////////////////////////////////////////////////////////////////////
01178  * Utility Functions
01179  */
01180 
01181 namespace util
01182 {
01183 
01184 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
01185 
01186 inline void onBailOut(int severity, char const* message, char const* processId)
01187 {
01188     pantheios_onBailOut3(severity, message, processId);
01189 }
01190 
01191 inline void onBailOut(int severity, char const* message, char const* processId, char const* qualifier)
01192 {
01193     pantheios_onBailOut4(severity, message, processId, qualifier);
01194 }
01195 
01196 inline size_t strnlen(pan_char_t const* s, size_t len)
01197 {
01198     return pantheios_util_strnlen(s, len);
01199 }
01200 
01201 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01202 
01203 } /* namespace util */
01204 
01205 /* /////////////////////////////////////////////////////////////////////////
01206  * Core Functions
01207  */
01208 
01213 inline int init()
01214 {
01215     return pantheios_init();
01216 }
01217 
01222 inline void uninit()
01223 {
01224     pantheios_uninit();
01225 }
01226 
01227 namespace core
01228 {
01229 
01230 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
01231 
01232 inline int isInitialising()
01233 {
01234     return pantheios_isInitialising();
01235 }
01236 
01237 inline int isInitialised()
01238 {
01239     return pantheios_isInitialised();
01240 }
01241 
01242 #  if defined(STLSOFT_COMPILER_IS_GCC)
01243 void exitProcess(int code)
01244 __attribute__((noreturn));
01245 #  endif /* compiler */
01246 
01247 #  if defined(STLSOFT_COMPILER_IS_MSVC)
01248 __declspec(noreturn)
01249 #  endif /* compiler */
01250 inline void exitProcess(int code)
01251 {
01252     pantheios_exitProcess(code);
01253 }
01254 
01255 inline PANTHEIOS_DECLARE_DEPRECATION("function", exit_process, exitProcess) void exit_process(int code)
01256 {
01257     exitProcess(code);
01258 }
01259 
01260 #ifndef malloc
01261 inline void* malloc(size_t cb)
01262 {
01263     return pantheios_malloc(cb);
01264 }
01265 #endif /* !malloc */
01266 
01267 inline void* inserterAllocate(size_t cb)
01268 {
01269     return pantheios_inserterAllocate(cb);
01270 }
01271 
01272 inline void inserterDeallocate(void* pv)
01273 {
01274     pantheios_inserterDeallocate(pv);
01275 }
01276 
01277 inline pan_char_t const* getPad(size_t minimumWidth, size_t* actualWidth)
01278 {
01279     return pantheios_getPad(minimumWidth, actualWidth);
01280 }
01281 
01282 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01283 
01284 } /* namespace core */
01285 
01290 inline int isSeverityLogged(pan_sev_t severity)
01291 {
01292     return pantheios_isSeverityLogged(severity);
01293 }
01294 
01295 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
01296 
01301 inline pan_char_t const* getProcessIdentity()
01302 {
01303     return pantheios_getProcessIdentity();
01304 }
01305 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01306 
01311 inline pan_char_t const* getStockSeverityString(pan_sev_t severity)
01312 {
01313     return pantheios_getStockSeverityString(severity);
01314 }
01315 
01316 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
01317 
01318 inline PANTHEIOS_DECLARE_DEPRECATION("function", getSeverityString, getStockSeverityString) pan_char_t const* getSeverityString(pan_sev_t severity)
01319 {
01320     return getStockSeverityString(severity);
01321 }
01322 
01323 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01324 
01329 inline size_t getStockSeverityStringLength(pan_sev_t severity)
01330 {
01331     return pantheios_getStockSeverityStringLength(severity);
01332 }
01333 
01334 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
01335 
01336 inline PANTHEIOS_DECLARE_DEPRECATION("function", getSeverityStringLength, getStockSeverityStringLength) size_t getSeverityStringLength(pan_sev_t severity)
01337 {
01338     return getStockSeverityStringLength(severity);
01339 }
01340 
01341 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01342 
01347 inline char const* getInitCodeString(int code)
01348 {
01349     return pantheios_getInitCodeString(code);
01350 }
01351 
01352 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
01353 
01354 inline PANTHEIOS_DECLARE_DEPRECATION("function", getInitErrorString, getInitCodeString) char const* getInitErrorString(int code)
01355 {
01356     return getInitCodeString(code);
01357 }
01358 
01359 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01360 
01365 inline size_t getInitCodeStringLength(int code)
01366 {
01367     return pantheios_getInitCodeStringLength(code);
01368 }
01369 
01370 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
01371 
01372 inline PANTHEIOS_DECLARE_DEPRECATION("function", getInitErrorStringLength, getInitCodeStringLength) size_t getInitErrorStringLength(int code)
01373 {
01374     return getStockSeverityStringLength(code);
01375 }
01376 
01377 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01378 
01379 namespace core
01380 {
01381 
01387 inline int getNextBackEndId()
01388 {
01389     return pantheios_getNextBackEndId();
01390 }
01391 
01392 } /* namespace core */
01393 
01398 inline void logputs(
01399     pan_sev_t           severity
01400 ,   pan_char_t const*   message
01401 )
01402 {
01403     pantheios_logputs(severity, message);
01404 }
01405 
01414 inline PANTHEIOS_DECLARE_DEPRECATION("function", puts, logputs) void puts(pan_sev_t severity, pan_char_t const* message)
01415 {
01416     pantheios_logputs(severity, message);
01417 }
01418 
01424 #if !defined(PANTHEIOS_DOCUMENTATION_SKIP_SECTION) && \
01425     defined(STLSOFT_COMPILER_IS_GCC) /* TODO: Change this to proper discriminated feature */
01426 int logprintf(
01427     pan_sev_t           severity
01428 ,   pan_char_t const*   format
01429 ,   ...
01430 )
01431 __attribute__((format(printf,2,3)))
01432 ;
01433 #endif /* compiler */
01434 
01435 inline int logprintf(
01436     pan_sev_t           severity
01437 ,   pan_char_t const*   format
01438 ,   ...
01439 )
01440 {
01441     va_list args;
01442     int     ret;
01443 
01444     va_start(args, format);
01445 
01446     ret = pantheios_logvprintf(severity, format, args);
01447 
01448     va_end(args);
01449 
01450     return ret;
01451 }
01452 
01453 
01458 inline int logvprintf(
01459     pan_sev_t           severity
01460 ,   pan_char_t const*   format
01461 ,   va_list             args
01462 )
01463 {
01464     return pantheios_logvprintf(severity, format, args);
01465 }
01466 
01467 #endif /* !PANTHEIOS_NO_NAMESPACE */
01468 
01469 /* /////////////////////////////////////////////////////////////////////////
01470  * String access shims
01471  */
01472 
01473 /* TODO: move all these shims into a separate file */
01474 
01475 #ifdef __cplusplus
01476 
01477 # if !defined(PANTHEIOS_NO_NAMESPACE)
01478 namespace shims
01479 {
01480 # endif /* !PANTHEIOS_NO_NAMESPACE */
01481 
01483 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01484 inline wchar_t const* c_str_ptr_w(pan_slice_t const& s)
01485 {
01486     return (0 == s.len) ? L"" : s.ptr;
01487 }
01488 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01489 inline char const* c_str_ptr_a(pan_slice_t const& s)
01490 {
01491     return (0 == s.len) ? "" : s.ptr;
01492 }
01493 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01494 
01495 inline pan_char_t const* c_str_ptr(pan_slice_t const& s)
01496 {
01497 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01498     return c_str_ptr_w(s);
01499 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01500     return c_str_ptr_a(s);
01501 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01502 }
01503 
01505 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01506 inline wchar_t const* c_str_ptr_null_w(pan_slice_t const& s)
01507 {
01508     return (0 != s.len) ? s.ptr : NULL;
01509 }
01510 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01511 inline char const* c_str_ptr_null_a(pan_slice_t const& s)
01512 {
01513     return (0 != s.len) ? s.ptr : NULL;
01514 }
01515 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01516 
01517 inline pan_char_t const* c_str_ptr_null(pan_slice_t const& s)
01518 {
01519 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01520     return c_str_ptr_null_w(s);
01521 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01522     return c_str_ptr_null_a(s);
01523 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01524 }
01525 
01527 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01528 inline wchar_t const* c_str_data_w(pan_slice_t const& s)
01529 {
01530     return c_str_ptr(s);
01531 }
01532 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01533 inline char const* c_str_data_a(pan_slice_t const& s)
01534 {
01535     return c_str_ptr(s);
01536 }
01537 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01538 
01539 inline pan_char_t const* c_str_data(pan_slice_t const& s)
01540 {
01541 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01542     return c_str_data_w(s);
01543 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01544     return c_str_data_a(s);
01545 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01546 }
01547 
01549 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01550 inline size_t c_str_len_w(pan_slice_t const& s)
01551 {
01552     return s.len;
01553 }
01554 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01555 inline size_t c_str_len_a(pan_slice_t const& s)
01556 {
01557     return s.len;
01558 }
01559 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01560 
01561 inline size_t c_str_len(pan_slice_t const& s)
01562 {
01563 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01564     return c_str_len_w(s);
01565 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01566     return c_str_len_a(s);
01567 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01568 }
01569 
01570 
01571 
01573 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01574 inline wchar_t const* c_str_ptr_w(pan_slice_t const* s)
01575 {
01576     return (NULL != s) ? c_str_ptr_w(*s) : L"";
01577 }
01578 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01579 inline char const* c_str_ptr_a(pan_slice_t const* s)
01580 {
01581     return (NULL != s) ? c_str_ptr_a(*s) : "";
01582 }
01583 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01584 
01585 inline pan_char_t const* c_str_ptr(pan_slice_t const* s)
01586 {
01587 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01588     return c_str_ptr_w(s);
01589 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01590     return c_str_ptr_a(s);
01591 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01592 }
01593 
01595 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01596 inline wchar_t const* c_str_ptr_null_w(pan_slice_t const* s)
01597 {
01598     return (NULL != s && (0 != s->len)) ? s->ptr : NULL;
01599 }
01600 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01601 inline char const* c_str_ptr_null_a(pan_slice_t const* s)
01602 {
01603     return (NULL != s && (0 != s->len)) ? s->ptr : NULL;
01604 }
01605 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01606 
01607 inline pan_char_t const* c_str_ptr_null(pan_slice_t const* s)
01608 {
01609 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01610     return c_str_ptr_null_w(s);
01611 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01612     return c_str_ptr_null_a(s);
01613 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01614 }
01615 
01617 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01618 inline wchar_t const* c_str_data_w(pan_slice_t const* s)
01619 {
01620     return c_str_ptr(s);
01621 }
01622 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01623 inline char const* c_str_data_a(pan_slice_t const* s)
01624 {
01625     return c_str_ptr(s);
01626 }
01627 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01628 
01629 inline pan_char_t const* c_str_data(pan_slice_t const* s)
01630 {
01631 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01632     return c_str_data_w(s);
01633 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01634     return c_str_data_a(s);
01635 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01636 }
01637 
01639 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01640 inline size_t c_str_len_w(pan_slice_t const* s)
01641 {
01642     return (NULL != s) ? s->len : 0;
01643 }
01644 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01645 inline size_t c_str_len_a(pan_slice_t const* s)
01646 {
01647     return (NULL != s) ? s->len : 0;
01648 }
01649 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01650 
01651 inline size_t c_str_len(pan_slice_t const* s)
01652 {
01653 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01654     return c_str_len_w(s);
01655 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01656     return c_str_len_a(s);
01657 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01658 }
01659 
01660 
01661 
01662 # ifndef PANTHEIOS_NO_STOCK_LEVELS
01663 
01664 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01665 inline wchar_t const* c_str_data_w(pan_severity_t severity)
01666 {
01667     return pantheios_getStockSeverityString(severity);
01668 }
01669 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01670 inline char const* c_str_data_a(pan_severity_t severity)
01671 {
01672     return pantheios_getStockSeverityString(severity);
01673 }
01674 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01675 
01676 inline pan_char_t const* c_str_data(pan_severity_t severity)
01677 {
01678     return pantheios_getStockSeverityString(severity);
01679 }
01680 
01682 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01683 inline size_t c_str_len_w(pan_severity_t severity)
01684 {
01685     return pantheios_getStockSeverityStringLength(severity);
01686 }
01687 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01688 inline size_t c_str_len_a(pan_severity_t severity)
01689 {
01690     return pantheios_getStockSeverityStringLength(severity);
01691 }
01692 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01693 
01694 inline size_t c_str_len(pan_severity_t severity)
01695 {
01696     return pantheios_getStockSeverityStringLength(severity);
01697 }
01698 
01700 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01701 inline wchar_t const* c_str_ptr_w(pan_severity_t severity)
01702 {
01703     return pantheios_getStockSeverityString(severity);
01704 }
01705 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01706 inline char const* c_str_ptr_a(pan_severity_t severity)
01707 {
01708     return pantheios_getStockSeverityString(severity);
01709 }
01710 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01711 
01712 inline pan_char_t const* c_str_ptr(pan_severity_t severity)
01713 {
01714     return pantheios_getStockSeverityString(severity);
01715 }
01716 
01718 # ifdef PANTHEIOS_USE_WIDE_STRINGS
01719 inline wchar_t const* c_str_ptr_null_w(pan_severity_t severity)
01720 {
01721     wchar_t const* s = pantheios_getStockSeverityString(severity);
01722 
01723     return ('\0' != *s) ? s : NULL;
01724 }
01725 # else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01726 inline char const* c_str_ptr_null_a(pan_severity_t severity)
01727 {
01728     char const* s = pantheios_getStockSeverityString(severity);
01729 
01730     return ('\0' != *s) ? s : NULL;
01731 }
01732 # endif /* PANTHEIOS_USE_WIDE_STRINGS */
01733 
01734 inline pan_char_t const* c_str_ptr_null(pan_severity_t severity)
01735 {
01736     pan_char_t const* s = pantheios_getStockSeverityString(severity);
01737 
01738     return ('\0' != *s) ? s : NULL;
01739 }
01740 # endif /* !PANTHEIOS_NO_STOCK_LEVELS */
01741 
01742 # if !defined(PANTHEIOS_NO_NAMESPACE)
01743 } /* namespace shims */
01744 # endif /* !PANTHEIOS_NO_NAMESPACE */
01745 
01746 #endif /* __cplusplus */
01747 
01748 /* /////////////////////////////////////////////////////////////////////////
01749  * pan_slice_t
01750  */
01751 
01752 #ifdef __cplusplus
01753 # ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
01754 
01755 inline /* static */ size_t pan_slice_t::calc_length_n_(pan_char_t const* s, size_t len)
01756 {
01757 #if !defined(PANTHEIOS_NO_NAMESPACE)
01758     return pantheios::util::strnlen(s, len);
01759 #else /* ? !PANTHEIOS_NO_NAMESPACE */
01760     return pantheios_util_strnlen(s, len);
01761 #endif /* !PANTHEIOS_NO_NAMESPACE */
01762 }
01763 
01764 inline pan_slice_t::pan_slice_t()
01765     : len(0)
01766     , ptr(NULL)
01767 {}
01768 
01769 inline pan_slice_t::pan_slice_t(pan_char_t const* p, size_t l)
01770     : len(l)
01771     , ptr(p)
01772 {
01773     static size_t const topBit = size_t(0x01) << (sizeof(size_t) * 8 - 1);
01774 
01775     if(topBit & len)
01776     {
01777         this->len = calc_length_n_(p, len);
01778     }
01779 }
01780 
01781 inline pan_slice_t::pan_slice_t(pan_slice_t const& rhs)
01782     : len(rhs.len)
01783     , ptr(rhs.ptr)
01784 {}
01785 inline pan_slice_t& pan_slice_t::operator =(pan_slice_t const& rhs)
01786 {
01787     len = rhs.len;
01788     ptr = rhs.ptr;
01789 
01790     return *this;
01791 }
01792 
01793 inline pan_slice_t::pan_slice_t(int l, pan_char_t const* p)
01794     : len(calc_length_n_(p, static_cast<size_t>(l)))
01795     , ptr(p)
01796 {}
01797 
01798 # endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01799 #endif /* __cplusplus */
01800 
01801 /* /////////////////////////////////////////////////////////////////////////
01802  * Namespace
01803  */
01804 
01805 #if !defined(PANTHEIOS_NO_NAMESPACE)
01806 } /* namespace pantheios */
01807 
01808 
01809 # ifndef PANTHEIOS_NO_STOCK_LEVELS
01810 
01811 /* #define the severity levels at the global level, since the construction
01812  * of pantheios::PANTHEIOS_SEV_xxx is too wordy and unnecessary.
01813  */
01814 
01855 #  define PANTHEIOS_SEV_EMERGENCY       ::pantheios::SEV_EMERGENCY
01856 #  define PANTHEIOS_SEV_ALERT           ::pantheios::SEV_ALERT
01857 #  define PANTHEIOS_SEV_CRITICAL        ::pantheios::SEV_CRITICAL
01858 #  define PANTHEIOS_SEV_ERROR           ::pantheios::SEV_ERROR
01859 #  define PANTHEIOS_SEV_WARNING         ::pantheios::SEV_WARNING
01860 #  define PANTHEIOS_SEV_NOTICE          ::pantheios::SEV_NOTICE
01861 #  define PANTHEIOS_SEV_INFORMATIONAL   ::pantheios::SEV_INFORMATIONAL
01862 #  define PANTHEIOS_SEV_DEBUG           ::pantheios::SEV_DEBUG
01863 
01864 # endif /* !PANTHEIOS_NO_STOCK_LEVELS */
01865 
01866 
01867 #ifdef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
01868 
01881 #endif /* PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
01882 namespace stlsoft
01883 {
01884 
01885 #ifdef PANTHEIOS_USE_WIDE_STRINGS
01886     using ::pantheios::shims::c_str_data_w;
01887     using ::pantheios::shims::c_str_len_w;
01888     using ::pantheios::shims::c_str_ptr_w;
01889     using ::pantheios::shims::c_str_ptr_null_w;
01890 #else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01891     using ::pantheios::shims::c_str_data_a;
01892     using ::pantheios::shims::c_str_len_a;
01893     using ::pantheios::shims::c_str_ptr_a;
01894     using ::pantheios::shims::c_str_ptr_null_a;
01895 #endif /* PANTHEIOS_USE_WIDE_STRINGS */
01896     using ::pantheios::shims::c_str_data;
01897     using ::pantheios::shims::c_str_len;
01898     using ::pantheios::shims::c_str_ptr;
01899     using ::pantheios::shims::c_str_ptr_null;
01900 
01901 } /* namespace stlsoft */
01902 
01903 #else /* ? !PANTHEIOS_NO_NAMESPACE */
01904 
01905 # ifdef __cplusplus
01906 namespace stlsoft
01907 {
01908 
01909 #ifdef PANTHEIOS_USE_WIDE_STRINGS
01910     using ::c_str_data_w;
01911     using ::c_str_len_w;
01912     using ::c_str_ptr_w;
01913     using ::c_str_ptr_null_w;
01914 #else /* ? PANTHEIOS_USE_WIDE_STRINGS */
01915     using ::c_str_data_a;
01916     using ::c_str_len_a;
01917     using ::c_str_ptr_a;
01918     using ::c_str_ptr_null_a;
01919 #endif /* PANTHEIOS_USE_WIDE_STRINGS */
01920     using ::c_str_data;
01921     using ::c_str_len;
01922     using ::c_str_ptr;
01923     using ::c_str_ptr_null;
01924 
01925 } /* namespace stlsoft */
01926 # endif /* __cplusplus */
01927 
01928 #endif /* !PANTHEIOS_NO_NAMESPACE */
01929 
01930 /* /////////////////////////////////////////////////////////////////////////
01931  * Inclusion
01932  */
01933 
01934 #ifdef STLSOFT_PPF_pragma_once_SUPPORT
01935 # pragma once
01936 #endif /* STLSOFT_PPF_pragma_once_SUPPORT */
01937 
01938 /* ////////////////////////////////////////////////////////////////////// */
01939 
01940 #endif /* !PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS */
01941 
01942 /* ///////////////////////////// end of file //////////////////////////// */

pantheios Library documentation © Matthew Wilson & Synesis Software, 2006-2011 SourceForge.net Logo