AlterOffice
AlterOffice 3.4 SDK C/C++ API Reference
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Reference.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 
3 #ifndef INCLUDED_COM_SUN_STAR_UNO_REFERENCE_H
4 #define INCLUDED_COM_SUN_STAR_UNO_REFERENCE_H
5 
6 #include "sal/config.h"
7 
8 #include <cassert>
9 #include <cstddef>
10 
11 #if defined LIBO_INTERNAL_ONLY
12 #include <type_traits>
13 #endif
14 
15 #include "rtl/alloc.h"
16 
17 namespace com
18 {
19 namespace sun
20 {
21 namespace star
22 {
23 namespace uno
24 {
25 
26 class RuntimeException;
27 class XInterface;
28 class Type;
29 class Any;
30 
36 {
41 };
42 
47 {
48 protected:
51  XInterface * _pInterface;
52 
59  inline static XInterface * SAL_CALL iquery( XInterface * pInterface, const Type & rType );
67  inline static XInterface * SAL_CALL iquery_throw( XInterface * pInterface, const Type & rType );
68 
69 public:
74  XInterface * SAL_CALL get() const
75  { return _pInterface; }
76 
81  bool SAL_CALL is() const
82  { return (NULL != _pInterface); }
83 
84 #if defined LIBO_INTERNAL_ONLY
85 
89  explicit operator bool() const
90  { return is(); }
91 #endif
92 
99  inline bool SAL_CALL operator == ( XInterface * pInterface ) const;
106  inline bool SAL_CALL operator != ( XInterface * pInterface ) const;
107 
114  inline bool SAL_CALL operator == ( const BaseReference & rRef ) const;
121  inline bool SAL_CALL operator != ( const BaseReference & rRef ) const;
122 
128  inline bool SAL_CALL operator < ( const BaseReference & rRef ) const;
129 };
130 
134 {
138 };
143 {
147 };
154 {
156 };
157 
162 template< class interface_type >
163 class SAL_DLLPUBLIC_RTTI Reference : public BaseReference
164 {
170  inline static XInterface * SAL_CALL iquery( XInterface * pInterface );
177  inline static XInterface * SAL_CALL iquery_throw( XInterface * pInterface );
183  inline static interface_type * SAL_CALL iset_throw( interface_type * pInterface );
184 
196  static interface_type * castFromXInterface(XInterface * p) {
197  return static_cast< interface_type * >(static_cast< void * >(p));
198  }
199 
211  static XInterface * castToXInterface(interface_type * p) {
212  return static_cast< XInterface * >(static_cast< void * >(p));
213  }
214 
215 public:
217  // these are here to force memory de/allocation to sal lib.
218  static void * SAL_CALL operator new ( ::size_t nSize )
219  { return ::rtl_allocateMemory( nSize ); }
220  static void SAL_CALL operator delete ( void * pMem )
221  { ::rtl_freeMemory( pMem ); }
222  static void * SAL_CALL operator new ( ::size_t, void * pMem )
223  { return pMem; }
224  static void SAL_CALL operator delete ( void *, void * )
225  {}
227 
230  inline ~Reference() COVERITY_NOEXCEPT_FALSE;
231 
234  inline Reference();
235 
240  inline Reference( const Reference< interface_type > & rRef );
241 
242 #if defined LIBO_INTERNAL_ONLY
243 
247  inline Reference( Reference< interface_type > && rRef ) noexcept;
248 
257  template< class derived_type >
258  inline Reference(
259  const Reference< derived_type > & rRef,
260  std::enable_if_t<
261  std::is_base_of_v<interface_type, derived_type>
262  && !std::is_same_v<interface_type, XInterface>, void *> = nullptr);
263 #endif
264 
269  inline Reference( interface_type * pInterface );
270 
276  inline Reference( interface_type * pInterface, __sal_NoAcquire dummy);
284  inline SAL_DEPRECATED("use SAL_NO_ACQUIRE version") Reference( interface_type * pInterface, UnoReference_NoAcquire dummy );
285 
291  inline Reference( const BaseReference & rRef, UnoReference_Query dummy );
297  inline Reference( XInterface * pInterface, UnoReference_Query dummy);
303  inline Reference( const Any & rAny, UnoReference_Query dummy);
311  inline Reference( const BaseReference & rRef, UnoReference_QueryThrow dummy );
312 #ifdef LIBO_INTERNAL_ONLY
313 
316  Reference( const Reference< interface_type > & rRef, UnoReference_QueryThrow dummy ) = delete;
317 #endif
318 
325  inline Reference( XInterface * pInterface, UnoReference_QueryThrow dummy );
333  inline Reference( const Any & rAny, UnoReference_QueryThrow dummy );
342  inline Reference( const Reference< interface_type > & rRef, UnoReference_SetThrow dummy );
351  inline Reference( interface_type * pInterface, UnoReference_SetThrow dummy );
352 
357  SAL_CALL operator const Reference< XInterface > & () const
358  { return * reinterpret_cast< const Reference< XInterface > * >( this ); }
359 
364  interface_type * SAL_CALL operator -> () const {
365  assert(_pInterface != NULL);
366  return castFromXInterface(_pInterface);
367  }
368 
374  interface_type & SAL_CALL operator * () const {
375  assert(_pInterface != NULL);
376  return *castFromXInterface(_pInterface);
377  }
378 
383  interface_type * SAL_CALL get() const
384  { return castFromXInterface(_pInterface); }
385 
388  inline void SAL_CALL clear();
389 
395  inline bool SAL_CALL set( const Reference< interface_type > & rRef );
401  inline bool SAL_CALL set( interface_type * pInterface );
402 
409  inline bool SAL_CALL set( interface_type * pInterface, __sal_NoAcquire dummy);
418  inline SAL_DEPRECATED("use SAL_NO_ACQUIRE version") bool SAL_CALL set( interface_type * pInterface, UnoReference_NoAcquire dummy);
419 
427  inline bool SAL_CALL set( XInterface * pInterface, UnoReference_Query dummy );
435  inline bool SAL_CALL set( const BaseReference & rRef, UnoReference_Query dummy);
436 
448  inline bool set( Any const & rAny, UnoReference_Query dummy );
449 
458  inline void SAL_CALL set( XInterface * pInterface, UnoReference_QueryThrow dummy );
467  inline void SAL_CALL set( const BaseReference & rRef, UnoReference_QueryThrow dummy );
468 #ifdef LIBO_INTERNAL_ONLY
469 
472  void set( const Reference< interface_type > & rRef, UnoReference_QueryThrow dummy ) = delete;
473 #endif
474 
484  inline void set( Any const & rAny, UnoReference_QueryThrow dummy);
494  inline void SAL_CALL set( interface_type * pInterface, UnoReference_SetThrow dummy);
504  inline void SAL_CALL set( const Reference< interface_type > & rRef, UnoReference_SetThrow dummy);
505 
506 
513  inline Reference< interface_type > & SAL_CALL operator = ( interface_type * pInterface );
520  inline Reference< interface_type > & SAL_CALL operator = ( const Reference< interface_type > & rRef );
521 #if defined LIBO_INTERNAL_ONLY
522 
528  inline Reference< interface_type > & operator = ( Reference< interface_type > && rRef ) noexcept;
529 #endif
530 
535  SAL_WARN_UNUSED_RESULT inline static Reference< interface_type > SAL_CALL query( const BaseReference & rRef );
541  SAL_WARN_UNUSED_RESULT inline static Reference< interface_type > SAL_CALL query( XInterface * pInterface );
542 };
543 
544 }
545 }
546 }
547 }
548 
549 #endif
550 
551 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
bool is() const
Checks if reference is null.
Definition: Reference.h:81
SAL_DLLPUBLIC void rtl_freeMemory(void *Ptr) SAL_THROW_EXTERN_C()
Free memory.
__sal_NoAcquire
Definition: types.h:332
C++ class representing an IDL any.
Definition: Any.h:36
UnoReference_QueryThrow
Enum defining UNO_QUERY_THROW for implicit interface query.
Definition: Reference.h:142
This enum value can be used for implicit interface query.
Definition: Reference.h:146
#define COVERITY_NOEXCEPT_FALSE
To markup destructors that coverity warns might throw exceptions which won&#39;t throw in practice...
Definition: types.h:329
This enum value can be used for implicit interface query.
Definition: Reference.h:137
UnoReference_Query
Enum defining UNO_QUERY for implicit interface query.
Definition: Reference.h:133
#define SAL_DEPRECATED(message)
Use as follows: SAL_DEPRECATED(&quot;Don&#39;t use, it&#39;s evil.&quot;) void doit(int nPara);.
Definition: types.h:454
This enum value can be used for creating a reference granting a given interface, i.e.
Definition: Reference.h:40
C++ class representing an IDL meta type.
Definition: Type.h:38
bool operator==(XInterface *pInterface) const
Equality operator: compares two interfaces Checks if both references are null or refer to the same ob...
Definition: Reference.hxx:369
bool operator!=(XInterface *pInterface) const
Inequality operator: compares two interfaces Checks if both references are null or refer to the same ...
Definition: Reference.hxx:406
#define SAL_WARN_UNUSED_RESULT
Use this as markup for functions and methods whose return value must be checked.
Definition: types.h:264
Template reference class for interface type derived from BaseReference.
Definition: unotype.hxx:23
UnoReference_SetThrow
Enum defining UNO_SET_THROW for throwing if attempts are made to assign a null interface.
Definition: Reference.h:153
SAL_DLLPUBLIC void * rtl_allocateMemory(sal_Size Bytes) SAL_THROW_EXTERN_C()
Allocate memory.
UnoReference_NoAcquire
Enum defining UNO_REF_NO_ACQUIRE for setting reference without acquiring a given interface.
Definition: Reference.h:35
This base class serves as a base class for all template reference classes and has been introduced due...
Definition: Reference.h:46
static XInterface * iquery(XInterface *pInterface, const Type &rType)
Queries given interface for type rType.
Definition: Reference.hxx:34
Definition: Reference.h:155
bool operator<(const BaseReference &rRef) const
Needed by some STL containers.
Definition: Reference.hxx:387
static XInterface * iquery_throw(XInterface *pInterface, const Type &rType)
Queries given interface for type rType.
Definition: Reference.hxx:57
XInterface * _pInterface
the interface pointer
Definition: Reference.h:51