UDK 3.2.7 C/C++ API Reference
uno/environment.hxx
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
00002 /*************************************************************************
00003  *
00004  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
00005  *
00006  * Copyright 2000, 2010 Oracle and/or its affiliates.
00007  *
00008  * OpenOffice.org - a multi-platform office productivity suite
00009  *
00010  * This file is part of OpenOffice.org.
00011  *
00012  * OpenOffice.org is free software: you can redistribute it and/or modify
00013  * it under the terms of the GNU Lesser General Public License version 3
00014  * only, as published by the Free Software Foundation.
00015  *
00016  * OpenOffice.org is distributed in the hope that it will be useful,
00017  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019  * GNU Lesser General Public License version 3 for more details
00020  * (a copy is included in the LICENSE file that accompanied this code).
00021  *
00022  * You should have received a copy of the GNU Lesser General Public License
00023  * version 3 along with OpenOffice.org.  If not, see
00024  * <http://www.openoffice.org/license.html>
00025  * for a copy of the LGPLv3 License.
00026  *
00027  ************************************************************************/
00028 #ifndef _UNO_ENVIRONMENT_HXX_
00029 #define _UNO_ENVIRONMENT_HXX_
00030 
00031 #include <rtl/alloc.h>
00032 #include <rtl/ustring.hxx>
00033 #include <uno/environment.h>
00034 
00035 #include "uno/lbnames.h"
00036  //for docpp
00038 namespace com
00039 { //for docpp
00041 namespace sun
00042 { //for docpp
00044 namespace star
00045 { //for docpp
00047 namespace uno
00048 {
00049 
00054 class Environment
00055 {
00058     uno_Environment * _pEnv;
00059 
00060 public:
00067     inline static Environment getCurrent(rtl::OUString const & typeName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(CPPU_STRINGIFY(CPPU_ENV)))) SAL_THROW(());
00068 
00070     // these are here to force memory de/allocation to sal lib.
00071     inline static void * SAL_CALL operator new ( size_t nSize ) SAL_THROW(())
00072         { return ::rtl_allocateMemory( nSize ); }
00073     inline static void SAL_CALL operator delete ( void * pMem ) SAL_THROW(())
00074         { ::rtl_freeMemory( pMem ); }
00075     inline static void * SAL_CALL operator new ( size_t, void * pMem ) SAL_THROW(())
00076         { return pMem; }
00077     inline static void SAL_CALL operator delete ( void *, void * ) SAL_THROW(())
00078         {}
00080 
00085     inline Environment( uno_Environment * pEnv = 0 ) SAL_THROW(());
00086 
00093     inline explicit Environment( rtl::OUString const & envDcp, void * pContext = NULL ) SAL_THROW(());
00094 
00095 
00100     inline Environment( const Environment & rEnv ) SAL_THROW(());
00101 
00104     inline ~Environment() SAL_THROW(());
00105 
00111     inline Environment & SAL_CALL operator = ( uno_Environment * pEnv ) SAL_THROW(());
00117     inline Environment & SAL_CALL operator = ( const Environment & rEnv ) SAL_THROW(())
00118         { return operator = ( rEnv._pEnv ); }
00119 
00124     inline uno_Environment * SAL_CALL get() const SAL_THROW(())
00125         { return _pEnv; }
00126 
00131     inline ::rtl::OUString SAL_CALL getTypeName() const SAL_THROW(())
00132         { return _pEnv->pTypeName; }
00133 
00138     inline void * SAL_CALL getContext() const SAL_THROW(())
00139         { return _pEnv->pContext; }
00140 
00145     inline sal_Bool SAL_CALL is() const SAL_THROW(())
00146         { return (_pEnv != 0); }
00147 
00150     inline void SAL_CALL clear() SAL_THROW(());
00151 
00158     inline void SAL_CALL invoke_v(uno_EnvCallee * pCallee, va_list * pParam) const SAL_THROW(());
00159 
00166     inline void SAL_CALL invoke(uno_EnvCallee * pCallee, ...) const SAL_THROW(());
00167 
00172     inline void SAL_CALL enter() const SAL_THROW(());
00173 
00179     inline int  SAL_CALL isValid(rtl::OUString * pReason) const SAL_THROW(());
00180 };
00181 //__________________________________________________________________________________________________
00182 inline Environment::Environment( uno_Environment * pEnv ) SAL_THROW(())
00183     : _pEnv( pEnv )
00184 {
00185     if (_pEnv)
00186         (*_pEnv->acquire)( _pEnv );
00187 }
00188 //__________________________________________________________________________________________________
00189 inline Environment::Environment( rtl::OUString const & rEnvDcp, void * pContext ) SAL_THROW(())
00190     : _pEnv(NULL)
00191 {
00192     uno_getEnvironment(&_pEnv, rEnvDcp.pData, pContext);
00193 }
00194 //__________________________________________________________________________________________________
00195 inline Environment::Environment( const Environment & rEnv ) SAL_THROW(())
00196     : _pEnv( rEnv._pEnv )
00197 {
00198     if (_pEnv)
00199         (*_pEnv->acquire)( _pEnv );
00200 }
00201 //__________________________________________________________________________________________________
00202 inline Environment::~Environment() SAL_THROW(())
00203 {
00204     if (_pEnv)
00205         (*_pEnv->release)( _pEnv );
00206 }
00207 //__________________________________________________________________________________________________
00208 inline void Environment::clear() SAL_THROW(())
00209 {
00210     if (_pEnv)
00211     {
00212         (*_pEnv->release)( _pEnv );
00213         _pEnv = 0;
00214     }
00215 }
00216 //__________________________________________________________________________________________________
00217 inline Environment & Environment::operator = ( uno_Environment * pEnv ) SAL_THROW(())
00218 {
00219     if (pEnv != _pEnv)
00220     {
00221         if (pEnv)
00222             (*pEnv->acquire)( pEnv );
00223         if (_pEnv)
00224             (*_pEnv->release)( _pEnv );
00225         _pEnv = pEnv;
00226     }
00227     return *this;
00228 }
00229 //__________________________________________________________________________________________________
00230 inline void SAL_CALL Environment::invoke_v(uno_EnvCallee * pCallee, va_list * pParam) const SAL_THROW(())
00231 {
00232     if (_pEnv)
00233         uno_Environment_invoke_v(_pEnv, pCallee, pParam);
00234 }
00235 //__________________________________________________________________________________________________
00236 inline void SAL_CALL Environment::invoke(uno_EnvCallee * pCallee, ...) const SAL_THROW(())
00237 {
00238     if (_pEnv)
00239     {
00240         va_list param;
00241 
00242         va_start(param, pCallee);
00243         uno_Environment_invoke_v(_pEnv, pCallee, &param);
00244         va_end(param);
00245     }
00246 
00247 }
00248 //__________________________________________________________________________________________________
00249 inline void SAL_CALL Environment::enter() const SAL_THROW(())
00250 {
00251     uno_Environment_enter(_pEnv);
00252 }
00253 //__________________________________________________________________________________________________
00254 inline int  SAL_CALL Environment::isValid(rtl::OUString * pReason) const SAL_THROW(())
00255 {
00256     return uno_Environment_isValid(_pEnv, (rtl_uString **)pReason);
00257 }
00258 //__________________________________________________________________________________________________
00259 inline Environment Environment::getCurrent(rtl::OUString const & typeName) SAL_THROW(())
00260 {
00261     Environment environment;
00262 
00263     uno_Environment * pEnv = NULL;
00264     uno_getCurrentEnvironment(&pEnv, typeName.pData);
00265     environment = pEnv;
00266     if (pEnv)
00267         pEnv->release(pEnv);
00268 
00269     return environment;
00270 }
00271 
00272 }
00273 }
00274 }
00275 }
00276 
00277 #endif
00278 
00279 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines