UDK 3.2.7 C/C++ API Reference
|
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, ¶m); 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: */