1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_SD_INC_HELPER_SIMPLEREFERENCECOMPONENT_HXX
21 #define INCLUDED_SD_INC_HELPER_SIMPLEREFERENCECOMPONENT_HXX
23 #include "osl/interlck.h"
32 /** A simple base implementation for reference-counted components.
33 acts like sal::SimpleReferenceObject but calls the virtual disposing()
34 methods before the ref count switches from 1 to zero.
36 class SimpleReferenceComponent
39 SimpleReferenceComponent();
42 The results are undefined if, for any individual instance of
43 SimpleReferenceComponent, the total number of calls to acquire() exceeds
44 the total number of calls to release() by a platform dependent amount
45 (which, hopefully, is quite large).
47 SD_DLLPUBLIC
void acquire();
48 SD_DLLPUBLIC
void release();
52 bool isDisposed() const { return mbDisposed
; }
54 /** see general class documentation
56 static void * operator new(std::size_t nSize
);
58 /** see general class documentation
60 static void * operator new(std::size_t nSize
,
61 std::nothrow_t
const & rNothrow
)
64 /** see general class documentation
66 static void operator delete(void * pPtr
);
68 /** see general class documentation
70 static void operator delete(void * pPtr
, std::nothrow_t
const & rNothrow
)
74 virtual void disposing();
76 virtual ~SimpleReferenceComponent();
79 oslInterlockedCount m_nCount
;
81 SimpleReferenceComponent(SimpleReferenceComponent
&) SAL_DELETED_FUNCTION
;
83 void operator =(SimpleReferenceComponent
) SAL_DELETED_FUNCTION
;
85 static void * operator new[](std::size_t) SAL_DELETED_FUNCTION
;
87 static void operator delete[](void * pPtr
) SAL_DELETED_FUNCTION
;
94 #endif // _SALHELPER_SimpleReferenceComponent_HXX_
96 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */