Open-RJ C/C++ User's Journal Synesis Software STLSoft - ... Robust, Lightweight, Cross-platform, Template Software ...

openrj/cpp/openrj.hpp

Go to the documentation of this file.
00001 /* /////////////////////////////////////////////////////////////////////////////
00002  * File:    openrj/cpp/openrj.hpp
00003  *
00004  * Purpose: Root header file for the C++ mapping of the Open-RJ library
00005  *
00006  * Created: 15th June 2004
00007  * Updated: 14th July 2006
00008  *
00009  * Home:    http://openrj.org/
00010  *
00011  * Copyright (c) 2004-2006, Matthew Wilson and Synesis Software
00012  * All rights reserved.
00013  *
00014  * Redistribution and use in source and binary forms, with or without
00015  * modification, are permitted provided that the following conditions are met:
00016  *
00017  * - Redistributions of source code must retain the above copyright notice, this
00018  *   list of conditions and the following disclaimer.
00019  * - Redistributions in binary form must reproduce the above copyright notice,
00020  *   this list of conditions and the following disclaimer in the documentation
00021  *   and/or other materials provided with the distribution.
00022  * - Neither the names of Matthew Wilson and Synesis Software nor the names of
00023  *   any contributors may be used to endorse or promote products derived from
00024  *   this software without specific prior written permission.
00025  *
00026  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00027  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00028  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00029  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00030  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00031  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00032  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00033  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00034  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00035  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00036  * POSSIBILITY OF SUCH DAMAGE.
00037  *
00038  * ////////////////////////////////////////////////////////////////////////// */
00039 
00040 
00047 #ifndef OPENRJ_INCL_OPENRJ_CPP_H_OPENRJ
00048 #define OPENRJ_INCL_OPENRJ_CPP_H_OPENRJ
00049 
00050 /* /////////////////////////////////////////////////////////////////////////////
00051  * Version information
00052  */
00053 
00054 #ifndef OPENRJ_DOCUMENTATION_SKIP_SECTION
00055 # define OPENRJ_VER_OPENRJ_CPP_H_OPENRJ_MAJOR       1
00056 # define OPENRJ_VER_OPENRJ_CPP_H_OPENRJ_MINOR       4
00057 # define OPENRJ_VER_OPENRJ_CPP_H_OPENRJ_REVISION    2
00058 # define OPENRJ_VER_OPENRJ_CPP_H_OPENRJ_EDIT        17
00059 #endif /* !OPENRJ_DOCUMENTATION_SKIP_SECTION */
00060 
00061 /* /////////////////////////////////////////////////////////////////////////////
00062  * Includes
00063  */
00064 
00065 #include <openrj/openrj.h>
00066 #include <openrj/openrj_assert.h>
00067 
00068 #ifdef OPENRJ_DOCUMENTATION_SKIP_SECTION
00069 # include <openrj/cpp/openrjfwd.hpp>
00070 #endif /* !OPENRJ_DOCUMENTATION_SKIP_SECTION */
00071 
00072 #ifndef STLSOFT_INCL_STLSOFT_HPP_STRING_ACCESS
00073 # include <stlsoft/shims/access/string.hpp>
00074 #endif /* !STLSOFT_INCL_STLSOFT_HPP_STRING_ACCESS */
00075 #include <stlsoft/string/string_view.hpp>
00076 
00077 #include <exception>
00078 
00079 /* /////////////////////////////////////////////////////////////////////////////
00080  * Compiler warnings
00081  */
00082 
00083 #ifdef __BORLANDC__
00084 # pragma warn -8026
00085 #endif /* __BORLANDC__ */
00086 
00087 /* /////////////////////////////////////////////////////////////////////////////
00088  * Compatibility
00089  */
00090 
00091 #if defined(ORJ_NO_NAMESPACE)
00092 # error The Open-RJ C++ mapping may not be used if namespacing is disabled/deselected
00093 #endif /* !ORJ_NO_NAMESPACE */
00094 
00095 /* /////////////////////////////////////////////////////////////////////////////
00096  * Namespace
00097  */
00098 
00099 namespace openrj
00100 {
00101     namespace cpp
00102     {
00103         class Field;
00104         class Record;
00105         class DatabaseBase;
00106         class FileDatabase;
00107         class MemoryDatabase;
00113         typedef ::stlsoft::basic_string_view<char>  String;
00114 
00115 #if !defined(ORJ_NO_EXCEPTIONS)
00117         class DatabaseException
00118             : public std::exception
00119         {
00120         public:
00125             DatabaseException(ORJRC rc, ORJError const &error)
00126                 : m_rc(rc)
00127                 , m_error(error)
00128             {}
00129 
00130         public:
00132             ORJRC rc() const
00133             {
00134                 return m_rc;
00135             }
00137             ORJError const &error() const
00138             {
00139                 return m_error;
00140             }
00141 
00142         public:
00144             char const  *what() const throw()
00145             {
00146                 if(ORJ_RC_PARSEERROR == m_rc)
00147                 {
00148                     return ::stlsoft::c_str_ptr(m_error.parseError);
00149                 }
00150                 else
00151                 {
00152                     return ::stlsoft::c_str_ptr(m_rc);
00153                 }
00154             }
00155 
00156         private:
00157             ORJRC       m_rc;
00158             ORJError    m_error;
00159         };
00160 #endif /* !ORJ_NO_EXCEPTIONS */
00161 
00162     } // namespace cpp
00163 } // namespace openrj
00164 
00165 /* ////////////////////////////////////////////////////////////////////////// */
00166 
00167 #endif /* !OPENRJ_INCL_OPENRJ_CPP_H_OPENRJ */
00168 
00169 /* ////////////////////////////////////////////////////////////////////////// */

Open-RJ Library documentation © Synesis Software Pty Ltd, 2004-2005