1*24f6443dSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*24f6443dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*24f6443dSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*24f6443dSAndrew Rist * distributed with this work for additional information 6*24f6443dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*24f6443dSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*24f6443dSAndrew Rist * "License"); you may not use this file except in compliance 9*24f6443dSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*24f6443dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*24f6443dSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*24f6443dSAndrew Rist * software distributed under the License is distributed on an 15*24f6443dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*24f6443dSAndrew Rist * KIND, either express or implied. See the License for the 17*24f6443dSAndrew Rist * specific language governing permissions and limitations 18*24f6443dSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*24f6443dSAndrew Rist *************************************************************/ 21*24f6443dSAndrew Rist 22*24f6443dSAndrew Rist 23cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UNO_ANY_H_ 24cdf0e10cSrcweir #define _COM_SUN_STAR_UNO_ANY_H_ 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include <uno/any2.h> 27cdf0e10cSrcweir #include <typelib/typedescription.h> 28cdf0e10cSrcweir #include <com/sun/star/uno/Type.h> 29cdf0e10cSrcweir #include "cppu/unotype.hxx" 30cdf0e10cSrcweir #include <rtl/alloc.h> 31cdf0e10cSrcweir 32cdf0e10cSrcweir 33cdf0e10cSrcweir namespace com 34cdf0e10cSrcweir { 35cdf0e10cSrcweir namespace sun 36cdf0e10cSrcweir { 37cdf0e10cSrcweir namespace star 38cdf0e10cSrcweir { 39cdf0e10cSrcweir namespace uno 40cdf0e10cSrcweir { 41cdf0e10cSrcweir 42cdf0e10cSrcweir /** C++ class representing an IDL any. 43cdf0e10cSrcweir This class is used to transport any type defined in IDL. The class inherits from the 44cdf0e10cSrcweir binary C representation of uno_Any. 45cdf0e10cSrcweir You can insert a value by either using the <<= operators or the template function makeAny(). 46cdf0e10cSrcweir No any can hold an any. You can extract values from an any by using the >>= operators which 47cdf0e10cSrcweir return true if the any contains an assignable value (no data loss), e.g. the any contains a 48cdf0e10cSrcweir short and you >>= it into a long variable. 49cdf0e10cSrcweir */ 50cdf0e10cSrcweir class Any : public uno_Any 51cdf0e10cSrcweir { 52cdf0e10cSrcweir public: 53cdf0e10cSrcweir // these are here to force memory de/allocation to sal lib. 54cdf0e10cSrcweir /** @internal */ 55cdf0e10cSrcweir inline static void * SAL_CALL operator new ( size_t nSize ) SAL_THROW( () ) 56cdf0e10cSrcweir { return ::rtl_allocateMemory( nSize ); } 57cdf0e10cSrcweir /** @internal */ 58cdf0e10cSrcweir inline static void SAL_CALL operator delete ( void * pMem ) SAL_THROW( () ) 59cdf0e10cSrcweir { ::rtl_freeMemory( pMem ); } 60cdf0e10cSrcweir /** @internal */ 61cdf0e10cSrcweir inline static void * SAL_CALL operator new ( size_t, void * pMem ) SAL_THROW( () ) 62cdf0e10cSrcweir { return pMem; } 63cdf0e10cSrcweir /** @internal */ 64cdf0e10cSrcweir inline static void SAL_CALL operator delete ( void *, void * ) SAL_THROW( () ) 65cdf0e10cSrcweir {} 66cdf0e10cSrcweir 67cdf0e10cSrcweir /** Default constructor: Any holds no value; its type is void. 68cdf0e10cSrcweir */ 69cdf0e10cSrcweir inline Any() SAL_THROW( () ); 70cdf0e10cSrcweir 71cdf0e10cSrcweir /** Templated ctor. Sets a copy of the given value. 72cdf0e10cSrcweir 73cdf0e10cSrcweir @param value value of the Any 74cdf0e10cSrcweir */ 75cdf0e10cSrcweir template <typename T> 76cdf0e10cSrcweir explicit inline Any( T const & value ); 77cdf0e10cSrcweir /// Ctor support for C++ bool. 78cdf0e10cSrcweir explicit inline Any( bool value ); 79cdf0e10cSrcweir 80cdf0e10cSrcweir /** Copy constructor: Sets value of the given any. 81cdf0e10cSrcweir 82cdf0e10cSrcweir @param rAny another any 83cdf0e10cSrcweir */ 84cdf0e10cSrcweir inline Any( const Any & rAny ) SAL_THROW( () ); 85cdf0e10cSrcweir 86cdf0e10cSrcweir /** Constructor: Sets a copy of the given data. 87cdf0e10cSrcweir 88cdf0e10cSrcweir @param pData_ value 89cdf0e10cSrcweir @param rType type of value 90cdf0e10cSrcweir */ 91cdf0e10cSrcweir inline Any( const void * pData_, const Type & rType ) SAL_THROW( () ); 92cdf0e10cSrcweir 93cdf0e10cSrcweir /** Constructor: Sets a copy of the given data. 94cdf0e10cSrcweir 95cdf0e10cSrcweir @param pData_ value 96cdf0e10cSrcweir @param pTypeDescr type of value 97cdf0e10cSrcweir */ 98cdf0e10cSrcweir inline Any( const void * pData_, typelib_TypeDescription * pTypeDescr ) SAL_THROW( () ); 99cdf0e10cSrcweir 100cdf0e10cSrcweir /** Constructor: Sets a copy of the given data. 101cdf0e10cSrcweir 102cdf0e10cSrcweir @param pData_ value 103cdf0e10cSrcweir @param pType type of value 104cdf0e10cSrcweir */ 105cdf0e10cSrcweir inline Any( const void * pData_, typelib_TypeDescriptionReference * pType ) SAL_THROW( () ); 106cdf0e10cSrcweir 107cdf0e10cSrcweir /** Destructor: Destructs any content and frees memory. 108cdf0e10cSrcweir */ 109cdf0e10cSrcweir inline ~Any() SAL_THROW( () ); 110cdf0e10cSrcweir 111cdf0e10cSrcweir /** Assignment operator: Sets the value of the given any. 112cdf0e10cSrcweir 113cdf0e10cSrcweir @param rAny another any (right side) 114cdf0e10cSrcweir @return this any 115cdf0e10cSrcweir */ 116cdf0e10cSrcweir inline Any & SAL_CALL operator = ( const Any & rAny ) SAL_THROW( () ); 117cdf0e10cSrcweir 118cdf0e10cSrcweir /** Gets the type of the set value. 119cdf0e10cSrcweir 120cdf0e10cSrcweir @return a Type object of the set value 121cdf0e10cSrcweir */ 122cdf0e10cSrcweir inline const Type & SAL_CALL getValueType() const SAL_THROW( () ) 123cdf0e10cSrcweir { return * reinterpret_cast< const Type * >( &pType ); } 124cdf0e10cSrcweir /** Gets the type of the set value. 125cdf0e10cSrcweir 126cdf0e10cSrcweir @return the UNacquired type description reference of the set value 127cdf0e10cSrcweir */ 128cdf0e10cSrcweir inline typelib_TypeDescriptionReference * SAL_CALL getValueTypeRef() const SAL_THROW( () ) 129cdf0e10cSrcweir { return pType; } 130cdf0e10cSrcweir 131cdf0e10cSrcweir /** Gets the type description of the set value. Provides ownership of the type description! 132cdf0e10cSrcweir Call an explicit typelib_typedescription_release() to release afterwards. 133cdf0e10cSrcweir 134cdf0e10cSrcweir @param a pointer to type description pointer 135cdf0e10cSrcweir */ 136cdf0e10cSrcweir inline void SAL_CALL getValueTypeDescription( typelib_TypeDescription ** ppTypeDescr ) const SAL_THROW( () ) 137cdf0e10cSrcweir { ::typelib_typedescriptionreference_getDescription( ppTypeDescr, pType ); } 138cdf0e10cSrcweir 139cdf0e10cSrcweir /** Gets the type class of the set value. 140cdf0e10cSrcweir 141cdf0e10cSrcweir @return the type class of the set value 142cdf0e10cSrcweir */ 143cdf0e10cSrcweir inline TypeClass SAL_CALL getValueTypeClass() const SAL_THROW( () ) 144cdf0e10cSrcweir { return (TypeClass)pType->eTypeClass; } 145cdf0e10cSrcweir 146cdf0e10cSrcweir /** Gets the type name of the set value. 147cdf0e10cSrcweir 148cdf0e10cSrcweir @return the type name of the set value 149cdf0e10cSrcweir */ 150cdf0e10cSrcweir inline ::rtl::OUString SAL_CALL getValueTypeName() const SAL_THROW( () ); 151cdf0e10cSrcweir 152cdf0e10cSrcweir /** Tests if any contains a value. 153cdf0e10cSrcweir 154cdf0e10cSrcweir @return true if any has a value, false otherwise 155cdf0e10cSrcweir */ 156cdf0e10cSrcweir inline sal_Bool SAL_CALL hasValue() const SAL_THROW( () ) 157cdf0e10cSrcweir { return (typelib_TypeClass_VOID != pType->eTypeClass); } 158cdf0e10cSrcweir 159cdf0e10cSrcweir /** Gets a pointer to the set value. 160cdf0e10cSrcweir 161cdf0e10cSrcweir @return a pointer to the set value 162cdf0e10cSrcweir */ 163cdf0e10cSrcweir inline const void * SAL_CALL getValue() const SAL_THROW( () ) 164cdf0e10cSrcweir { return pData; } 165cdf0e10cSrcweir 166cdf0e10cSrcweir #if ! defined(EXCEPTIONS_OFF) 167cdf0e10cSrcweir /** Provides a value of specified type, so you can easily write e.g. 168cdf0e10cSrcweir <pre> 169cdf0e10cSrcweir sal_Int32 myVal = myAny.get<sal_Int32>(); 170cdf0e10cSrcweir </pre> 171cdf0e10cSrcweir Widening conversion without data loss is taken into account. 172cdf0e10cSrcweir Throws a 173cdf0e10cSrcweir <type scope="com::sun::star::uno">RuntimeException</type> 174cdf0e10cSrcweir if the specified type cannot be provided. 175cdf0e10cSrcweir 176cdf0e10cSrcweir @return value of specified type 177cdf0e10cSrcweir @exception <type scope="com::sun::star::uno">RuntimeException</type> 178cdf0e10cSrcweir in case the specified type cannot be provided 179cdf0e10cSrcweir */ 180cdf0e10cSrcweir template <typename T> 181cdf0e10cSrcweir inline T get() const; 182cdf0e10cSrcweir #endif // ! defined(EXCEPTIONS_OFF) 183cdf0e10cSrcweir 184cdf0e10cSrcweir /** Sets a value. If the any already contains a value, that value will be destructed 185cdf0e10cSrcweir and its memory freed. 186cdf0e10cSrcweir 187cdf0e10cSrcweir @param pData_ pointer to value 188cdf0e10cSrcweir @param rType type of value 189cdf0e10cSrcweir */ 190cdf0e10cSrcweir inline void SAL_CALL setValue( const void * pData_, const Type & rType ) SAL_THROW( () ); 191cdf0e10cSrcweir /** Sets a value. If the any already contains a value, that value will be destructed 192cdf0e10cSrcweir and its memory freed. 193cdf0e10cSrcweir 194cdf0e10cSrcweir @param pData_ pointer to value 195cdf0e10cSrcweir @param pType type of value 196cdf0e10cSrcweir */ 197cdf0e10cSrcweir inline void SAL_CALL setValue( const void * pData_, typelib_TypeDescriptionReference * pType ) SAL_THROW( () ); 198cdf0e10cSrcweir /** Sets a value. If the any already contains a value, that value will be destructed 199cdf0e10cSrcweir and its memory freed. 200cdf0e10cSrcweir 201cdf0e10cSrcweir @param pData_ pointer to value 202cdf0e10cSrcweir @param pTypeDescr type description of value 203cdf0e10cSrcweir */ 204cdf0e10cSrcweir inline void SAL_CALL setValue( const void * pData_, typelib_TypeDescription * pTypeDescr ) SAL_THROW( () ); 205cdf0e10cSrcweir 206cdf0e10cSrcweir /** Clears this any. If the any already contains a value, that value will be destructed 207cdf0e10cSrcweir and its memory freed. After this has been called, the any does not contain a value. 208cdf0e10cSrcweir */ 209cdf0e10cSrcweir inline void SAL_CALL clear() SAL_THROW( () ); 210cdf0e10cSrcweir 211cdf0e10cSrcweir /** Tests whether this any is extractable to a value of given type. 212cdf0e10cSrcweir Widening conversion without data loss is taken into account. 213cdf0e10cSrcweir 214cdf0e10cSrcweir @param rType destination type 215cdf0e10cSrcweir @return true if this any is extractable to value of given type (e.g. using >>= operator) 216cdf0e10cSrcweir */ 217cdf0e10cSrcweir inline sal_Bool SAL_CALL isExtractableTo( const Type & rType ) const SAL_THROW( () ); 218cdf0e10cSrcweir 219cdf0e10cSrcweir /** Tests whether this any can provide a value of specified type. 220cdf0e10cSrcweir Widening conversion without data loss is taken into account. 221cdf0e10cSrcweir 222cdf0e10cSrcweir @return true if this any can provide a value of specified type 223cdf0e10cSrcweir (e.g. using >>= operator) 224cdf0e10cSrcweir */ 225cdf0e10cSrcweir template <typename T> 226cdf0e10cSrcweir inline bool has() const; 227cdf0e10cSrcweir 228cdf0e10cSrcweir /** Equality operator: compares two anys. 229cdf0e10cSrcweir The values need not be of equal type, e.g. a short integer is compared to a long integer. 230cdf0e10cSrcweir 231cdf0e10cSrcweir @param rAny another any (right side) 232cdf0e10cSrcweir @return true if both any contains equal values 233cdf0e10cSrcweir */ 234cdf0e10cSrcweir inline sal_Bool SAL_CALL operator == ( const Any & rAny ) const SAL_THROW( () ); 235cdf0e10cSrcweir /** Unequality operator: compares two anys. 236cdf0e10cSrcweir The values need not be of equal type, e.g. a short integer is compared to a long integer. 237cdf0e10cSrcweir 238cdf0e10cSrcweir @param rAny another any (right side) 239cdf0e10cSrcweir @return true if both any contains unequal values 240cdf0e10cSrcweir */ 241cdf0e10cSrcweir inline sal_Bool SAL_CALL operator != ( const Any & rAny ) const SAL_THROW( () ); 242cdf0e10cSrcweir 243cdf0e10cSrcweir private: 244cdf0e10cSrcweir // not impl: forbid use with ambiguous type (sal_Unicode, sal_uInt16) 245cdf0e10cSrcweir explicit Any( sal_uInt16 ); 246cdf0e10cSrcweir #if defined(_MSC_VER) 247cdf0e10cSrcweir // Omitting the following private declarations leads to an internal compiler 248cdf0e10cSrcweir // error on MSVC (version 1310). 249cdf0e10cSrcweir // not impl: forbid use with ambiguous type (sal_Unicode, sal_uInt16) 250cdf0e10cSrcweir #if ! defined(EXCEPTIONS_OFF) 251cdf0e10cSrcweir template <> 252cdf0e10cSrcweir sal_uInt16 get<sal_uInt16>() const; 253cdf0e10cSrcweir #endif // ! defined(EXCEPTIONS_OFF) 254cdf0e10cSrcweir template <> 255cdf0e10cSrcweir bool has<sal_uInt16>() const; 256cdf0e10cSrcweir #endif // defined(_MSC_VER) 257cdf0e10cSrcweir }; 258cdf0e10cSrcweir 259cdf0e10cSrcweir /** Template function to generically construct an any from a C++ value. 260cdf0e10cSrcweir 261cdf0e10cSrcweir @tplparam C value type 262cdf0e10cSrcweir @param value a value 263cdf0e10cSrcweir @return an any 264cdf0e10cSrcweir */ 265cdf0e10cSrcweir template< class C > 266cdf0e10cSrcweir inline Any SAL_CALL makeAny( const C & value ) SAL_THROW( () ); 267cdf0e10cSrcweir 268cdf0e10cSrcweir // additionally specialized for C++ bool 269cdf0e10cSrcweir template<> 270cdf0e10cSrcweir inline Any SAL_CALL makeAny( bool const & value ) SAL_THROW( () ); 271cdf0e10cSrcweir 272cdf0e10cSrcweir class BaseReference; 273cdf0e10cSrcweir class Type; 274cdf0e10cSrcweir 275cdf0e10cSrcweir /** Template binary <<= operator to set the value of an any. 276cdf0e10cSrcweir 277cdf0e10cSrcweir @tplparam C value type 278cdf0e10cSrcweir @param rAny destination any (left side) 279cdf0e10cSrcweir @param value source value (right side) 280cdf0e10cSrcweir */ 281cdf0e10cSrcweir template< class C > 282cdf0e10cSrcweir inline void SAL_CALL operator <<= ( Any & rAny, const C & value ) SAL_THROW( () ); 283cdf0e10cSrcweir 284cdf0e10cSrcweir // additionally for C++ bool: 285cdf0e10cSrcweir inline void SAL_CALL operator <<= ( Any & rAny, bool const & value ) 286cdf0e10cSrcweir SAL_THROW( () ); 287cdf0e10cSrcweir 288cdf0e10cSrcweir /** Template binary >>= operator to assign a value from an any. 289cdf0e10cSrcweir If the any does not contain a value that can be assigned without data loss, then this 290cdf0e10cSrcweir operation will fail returning false. 291cdf0e10cSrcweir 292cdf0e10cSrcweir @tplparam C value type 293cdf0e10cSrcweir @param rAny source any (left side) 294cdf0e10cSrcweir @param value destination value (right side) 295cdf0e10cSrcweir @return true if assignment was possible without data loss 296cdf0e10cSrcweir */ 297cdf0e10cSrcweir template< class C > 298cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, C & value ) SAL_THROW( () ); 299cdf0e10cSrcweir 300cdf0e10cSrcweir /** Template equality operator: compares set value of left side any to right side value. 301cdf0e10cSrcweir The values need not be of equal type, e.g. a short integer is compared to a long integer. 302cdf0e10cSrcweir This operator can be implemented as template member function, if all supported compilers 303cdf0e10cSrcweir can cope with template member functions. 304cdf0e10cSrcweir 305cdf0e10cSrcweir @tplparam C value type 306cdf0e10cSrcweir @param rAny another any (left side) 307cdf0e10cSrcweir @param value a value (right side) 308cdf0e10cSrcweir @return true if values are equal, false otherwise 309cdf0e10cSrcweir */ 310cdf0e10cSrcweir template< class C > 311cdf0e10cSrcweir inline sal_Bool SAL_CALL operator == ( const Any & rAny, const C & value ) SAL_THROW( () ); 312cdf0e10cSrcweir /** Template unequality operator: compares set value of left side any to right side value. 313cdf0e10cSrcweir The values need not be of equal type, e.g. a short integer is compared to a long integer. 314cdf0e10cSrcweir This operator can be implemented as template member function, if all supported compilers 315cdf0e10cSrcweir can cope with template member functions. 316cdf0e10cSrcweir 317cdf0e10cSrcweir @tplparam C value type 318cdf0e10cSrcweir @param rAny another any (left side) 319cdf0e10cSrcweir @param value a value (right side) 320cdf0e10cSrcweir @return true if values are unequal, false otherwise 321cdf0e10cSrcweir */ 322cdf0e10cSrcweir template< class C > 323cdf0e10cSrcweir inline sal_Bool SAL_CALL operator != ( const Any & rAny, const C & value ) SAL_THROW( () ); 324cdf0e10cSrcweir 325cdf0e10cSrcweir // additional specialized >>= and == operators 326cdf0e10cSrcweir // bool 327cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, sal_Bool & value ) SAL_THROW( () ); 328cdf0e10cSrcweir inline sal_Bool SAL_CALL operator == ( const Any & rAny, const sal_Bool & value ) SAL_THROW( () ); 329cdf0e10cSrcweir template<> 330cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( Any const & rAny, bool & value ) 331cdf0e10cSrcweir SAL_THROW( () ); 332cdf0e10cSrcweir template<> 333cdf0e10cSrcweir inline sal_Bool SAL_CALL operator == ( Any const & rAny, bool const & value ) 334cdf0e10cSrcweir SAL_THROW( () ); 335cdf0e10cSrcweir // byte 336cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, sal_Int8 & value ) SAL_THROW( () ); 337cdf0e10cSrcweir // short 338cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, sal_Int16 & value ) SAL_THROW( () ); 339cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, sal_uInt16 & value ) SAL_THROW( () ); 340cdf0e10cSrcweir // long 341cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, sal_Int32 & value ) SAL_THROW( () ); 342cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, sal_uInt32 & value ) SAL_THROW( () ); 343cdf0e10cSrcweir // hyper 344cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, sal_Int64 & value ) SAL_THROW( () ); 345cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, sal_uInt64 & value ) SAL_THROW( () ); 346cdf0e10cSrcweir // float 347cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, float & value ) SAL_THROW( () ); 348cdf0e10cSrcweir // double 349cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, double & value ) SAL_THROW( () ); 350cdf0e10cSrcweir // string 351cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, ::rtl::OUString & value ) SAL_THROW( () ); 352cdf0e10cSrcweir inline sal_Bool SAL_CALL operator == ( const Any & rAny, const ::rtl::OUString & value ) SAL_THROW( () ); 353cdf0e10cSrcweir // type 354cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, Type & value ) SAL_THROW( () ); 355cdf0e10cSrcweir inline sal_Bool SAL_CALL operator == ( const Any & rAny, const Type & value ) SAL_THROW( () ); 356cdf0e10cSrcweir // any 357cdf0e10cSrcweir inline sal_Bool SAL_CALL operator >>= ( const Any & rAny, Any & value ) SAL_THROW( () ); 358cdf0e10cSrcweir // interface 359cdf0e10cSrcweir inline sal_Bool SAL_CALL operator == ( const Any & rAny, const BaseReference & value ) SAL_THROW( () ); 360cdf0e10cSrcweir 361cdf0e10cSrcweir } 362cdf0e10cSrcweir } 363cdf0e10cSrcweir } 364cdf0e10cSrcweir } 365cdf0e10cSrcweir 366cdf0e10cSrcweir /** Gets the meta type of IDL type any. 367cdf0e10cSrcweir 368cdf0e10cSrcweir There are cases (involving templates) where uses of getCppuType are known to 369cdf0e10cSrcweir not compile. Use cppu::UnoType or cppu::getTypeFavourUnsigned instead. 370cdf0e10cSrcweir 371cdf0e10cSrcweir @param dummy typed pointer for function signature 372cdf0e10cSrcweir @return type of IDL type any 373cdf0e10cSrcweir */ 374cdf0e10cSrcweir inline const ::com::sun::star::uno::Type & SAL_CALL getCppuType( const ::com::sun::star::uno::Any * ) SAL_THROW( () ) 375cdf0e10cSrcweir { 376cdf0e10cSrcweir return ::cppu::UnoType< ::com::sun::star::uno::Any >::get(); 377cdf0e10cSrcweir } 378cdf0e10cSrcweir 379cdf0e10cSrcweir #endif 380