bump product version to 5.0.4.1
[LibreOffice.git] / sd / inc / helper / simplereferencecomponent.hxx
blob3bb1de4d471f67765518ec092fc5df7a11e3cf2f
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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"
25 #include <cstddef>
26 #include <new>
28 #include <sddllapi.h>
30 namespace sd {
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
38 public:
39 SimpleReferenceComponent();
41 /** @ATTENTION
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();
50 void Dispose();
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)
73 protected:
74 virtual void disposing();
76 virtual ~SimpleReferenceComponent();
78 private:
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;
89 bool mbDisposed;
94 #endif // _SALHELPER_SimpleReferenceComponent_HXX_
96 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */