00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _UNO_ENVIRONMENT_HXX_
00020 #define _UNO_ENVIRONMENT_HXX_
00021
00022 #include <rtl/alloc.h>
00023 #include <rtl/ustring.hxx>
00024 #include <uno/environment.h>
00025
00026 #include "uno/lbnames.h"
00027
00029 namespace com
00030 {
00032 namespace sun
00033 {
00035 namespace star
00036 {
00038 namespace uno
00039 {
00040
00045 class Environment
00046 {
00049 uno_Environment * _pEnv;
00050
00051 public:
00058 inline static Environment getCurrent(rtl::OUString const & typeName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(CPPU_STRINGIFY(CPPU_ENV)))) SAL_THROW(());
00059
00061
00062 inline static void * SAL_CALL operator new ( size_t nSize ) SAL_THROW(())
00063 { return ::rtl_allocateMemory( nSize ); }
00064 inline static void SAL_CALL operator delete ( void * pMem ) SAL_THROW(())
00065 { ::rtl_freeMemory( pMem ); }
00066 inline static void * SAL_CALL operator new ( size_t, void * pMem ) SAL_THROW(())
00067 { return pMem; }
00068 inline static void SAL_CALL operator delete ( void *, void * ) SAL_THROW(())
00069 {}
00071
00076 inline Environment( uno_Environment * pEnv = 0 ) SAL_THROW(());
00077
00084 inline explicit Environment( rtl::OUString const & envDcp, void * pContext = NULL ) SAL_THROW(());
00085
00086
00091 inline Environment( const Environment & rEnv ) SAL_THROW(());
00092
00095 inline ~Environment() SAL_THROW(());
00096
00102 inline Environment & SAL_CALL operator = ( uno_Environment * pEnv ) SAL_THROW(());
00108 inline Environment & SAL_CALL operator = ( const Environment & rEnv ) SAL_THROW(())
00109 { return operator = ( rEnv._pEnv ); }
00110
00115 inline uno_Environment * SAL_CALL get() const SAL_THROW(())
00116 { return _pEnv; }
00117
00122 inline ::rtl::OUString SAL_CALL getTypeName() const SAL_THROW(())
00123 { return _pEnv->pTypeName; }
00124
00129 inline void * SAL_CALL getContext() const SAL_THROW(())
00130 { return _pEnv->pContext; }
00131
00136 inline sal_Bool SAL_CALL is() const SAL_THROW(())
00137 { return (_pEnv != 0); }
00138
00141 inline void SAL_CALL clear() SAL_THROW(());
00142
00149 inline void SAL_CALL invoke_v(uno_EnvCallee * pCallee, va_list * pParam) const SAL_THROW(());
00150
00157 inline void SAL_CALL invoke(uno_EnvCallee * pCallee, ...) const SAL_THROW(());
00158
00163 inline void SAL_CALL enter() const SAL_THROW(());
00164
00170 inline int SAL_CALL isValid(rtl::OUString * pReason) const SAL_THROW(());
00171 };
00172
00173 inline Environment::Environment( uno_Environment * pEnv ) SAL_THROW(())
00174 : _pEnv( pEnv )
00175 {
00176 if (_pEnv)
00177 (*_pEnv->acquire)( _pEnv );
00178 }
00179
00180 inline Environment::Environment( rtl::OUString const & rEnvDcp, void * pContext ) SAL_THROW(())
00181 : _pEnv(NULL)
00182 {
00183 uno_getEnvironment(&_pEnv, rEnvDcp.pData, pContext);
00184 }
00185
00186 inline Environment::Environment( const Environment & rEnv ) SAL_THROW(())
00187 : _pEnv( rEnv._pEnv )
00188 {
00189 if (_pEnv)
00190 (*_pEnv->acquire)( _pEnv );
00191 }
00192
00193 inline Environment::~Environment() SAL_THROW(())
00194 {
00195 if (_pEnv)
00196 (*_pEnv->release)( _pEnv );
00197 }
00198
00199 inline void Environment::clear() SAL_THROW(())
00200 {
00201 if (_pEnv)
00202 {
00203 (*_pEnv->release)( _pEnv );
00204 _pEnv = 0;
00205 }
00206 }
00207
00208 inline Environment & Environment::operator = ( uno_Environment * pEnv ) SAL_THROW(())
00209 {
00210 if (pEnv != _pEnv)
00211 {
00212 if (pEnv)
00213 (*pEnv->acquire)( pEnv );
00214 if (_pEnv)
00215 (*_pEnv->release)( _pEnv );
00216 _pEnv = pEnv;
00217 }
00218 return *this;
00219 }
00220
00221 inline void SAL_CALL Environment::invoke_v(uno_EnvCallee * pCallee, va_list * pParam) const SAL_THROW(())
00222 {
00223 if (_pEnv)
00224 uno_Environment_invoke_v(_pEnv, pCallee, pParam);
00225 }
00226
00227 inline void SAL_CALL Environment::invoke(uno_EnvCallee * pCallee, ...) const SAL_THROW(())
00228 {
00229 if (_pEnv)
00230 {
00231 va_list param;
00232
00233 va_start(param, pCallee);
00234 uno_Environment_invoke_v(_pEnv, pCallee, ¶m);
00235 va_end(param);
00236 }
00237
00238 }
00239
00240 inline void SAL_CALL Environment::enter() const SAL_THROW(())
00241 {
00242 uno_Environment_enter(_pEnv);
00243 }
00244
00245 inline int SAL_CALL Environment::isValid(rtl::OUString * pReason) const SAL_THROW(())
00246 {
00247 return uno_Environment_isValid(_pEnv, (rtl_uString **)pReason);
00248 }
00249
00250 inline Environment Environment::getCurrent(rtl::OUString const & typeName) SAL_THROW(())
00251 {
00252 Environment environment;
00253
00254 uno_Environment * pEnv = NULL;
00255 uno_getCurrentEnvironment(&pEnv, typeName.pData);
00256 environment = pEnv;
00257 if (pEnv)
00258 pEnv->release(pEnv);
00259
00260 return environment;
00261 }
00262
00263 }
00264 }
00265 }
00266 }
00267
00268 #endif
00269
00270