LCOV - code coverage report
Current view: top level - libreoffice/solver/unxlngi6.pro/inc/com/sun/star/uno - Any.h (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 18 18 100.0 %
Date: 2012-12-27 Functions: 9 9 100.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10