summaryrefslogtreecommitdiff
path: root/sd/source/ui/tools/SdGlobalResourceContainer.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/tools/SdGlobalResourceContainer.cxx')
-rw-r--r--sd/source/ui/tools/SdGlobalResourceContainer.cxx218
1 files changed, 0 insertions, 218 deletions
diff --git a/sd/source/ui/tools/SdGlobalResourceContainer.cxx b/sd/source/ui/tools/SdGlobalResourceContainer.cxx
deleted file mode 100644
index b74b2f019..000000000
--- a/sd/source/ui/tools/SdGlobalResourceContainer.cxx
+++ /dev/null
@@ -1,218 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "tools/SdGlobalResourceContainer.hxx"
-
-#include <algorithm>
-#include <vector>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-
-namespace sd {
-
-
-//===== SdGlobalResourceContainer::Implementation =============================
-
-class SdGlobalResourceContainer::Implementation
-{
-private:
- friend class SdGlobalResourceContainer;
- static SdGlobalResourceContainer* mpInstance;
-
- ::osl::Mutex maMutex;
-
- /** All instances of SdGlobalResource in this vector are owned by the
- container and will be destroyed when the container is destroyed.
- */
- typedef ::std::vector<SdGlobalResource*> ResourceList;
- ResourceList maResources;
-
- typedef ::std::vector<boost::shared_ptr<SdGlobalResource> > SharedResourceList;
- SharedResourceList maSharedResources;
-
- typedef ::std::vector<Reference<XInterface> > XInterfaceResourceList;
- XInterfaceResourceList maXInterfaceResources;
-};
-
-
-
-
-// static
-SdGlobalResourceContainer& SdGlobalResourceContainer::Instance (void)
-{
- DBG_ASSERT(Implementation::mpInstance!=NULL,
- "SdGlobalResourceContainer::Instance(): instance has been deleted");
- // Maybe we should throw an exception when the instance has been deleted.
- return *Implementation::mpInstance;
-}
-
-SdGlobalResourceContainer*
- SdGlobalResourceContainer::Implementation::mpInstance = NULL;
-
-
-
-
-//===== SdGlobalResourceContainer =============================================
-
-void SdGlobalResourceContainer::AddResource (
- ::std::auto_ptr<SdGlobalResource> pResource)
-{
- ::osl::MutexGuard aGuard (mpImpl->maMutex);
-
- Implementation::ResourceList::iterator iResource;
- iResource = ::std::find (
- mpImpl->maResources.begin(),
- mpImpl->maResources.end(),
- pResource.get());
- if (iResource == mpImpl->maResources.end())
- mpImpl->maResources.push_back(pResource.get());
- else
- {
- // Because the given resource is an auto_ptr it is highly unlikely
- // that we come here. But who knows?
- DBG_ASSERT (false,
- "SdGlobalResourceContainer:AddResource(): Resource added twice.");
- }
- // We can not put the auto_ptr into the vector so we release the
- // auto_ptr and document that we take ownership explicitly.
- pResource.release();
-}
-
-
-
-
-void SdGlobalResourceContainer::AddResource (
- ::boost::shared_ptr<SdGlobalResource> pResource)
-{
- ::osl::MutexGuard aGuard (mpImpl->maMutex);
-
- Implementation::SharedResourceList::iterator iResource;
- iResource = ::std::find (
- mpImpl->maSharedResources.begin(),
- mpImpl->maSharedResources.end(),
- pResource);
- if (iResource == mpImpl->maSharedResources.end())
- mpImpl->maSharedResources.push_back(pResource);
- else
- {
- DBG_ASSERT (false,
- "SdGlobalResourceContainer:AddResource(): Resource added twice.");
- }
-}
-
-
-
-
-void SdGlobalResourceContainer::AddResource (const Reference<XInterface>& rxResource)
-{
- ::osl::MutexGuard aGuard (mpImpl->maMutex);
-
- Implementation::XInterfaceResourceList::iterator iResource;
- iResource = ::std::find (
- mpImpl->maXInterfaceResources.begin(),
- mpImpl->maXInterfaceResources.end(),
- rxResource);
- if (iResource == mpImpl->maXInterfaceResources.end())
- mpImpl->maXInterfaceResources.push_back(rxResource);
- else
- {
- DBG_ASSERT (false,
- "SdGlobalResourceContainer:AddResource(): Resource added twice.");
- }
-}
-
-
-
-SdGlobalResourceContainer::SdGlobalResourceContainer (void)
- : mpImpl (new SdGlobalResourceContainer::Implementation())
-{
- Implementation::mpInstance = this;
-}
-
-
-
-
-SdGlobalResourceContainer::~SdGlobalResourceContainer (void)
-{
- ::osl::MutexGuard aGuard (mpImpl->maMutex);
-
- // Release the resources in reversed order of their addition to the
- // container. This is because a resource A added before resource B
- // may have been created due to a request of B. Thus B depends on A and
- // should be destroyed first.
- Implementation::ResourceList::reverse_iterator iResource;
- for (iResource = mpImpl->maResources.rbegin();
- iResource != mpImpl->maResources.rend();
- ++iResource)
- {
- delete *iResource;
- }
-
- // The SharedResourceList has not to be released manually. We just
- // assert resources that are still held by someone other than us.
- Implementation::SharedResourceList::reverse_iterator iSharedResource;
- for (iSharedResource = mpImpl->maSharedResources.rbegin();
- iSharedResource != mpImpl->maSharedResources.rend();
- ++iSharedResource)
- {
- if ( ! iSharedResource->unique())
- {
- SdGlobalResource* pResource = iSharedResource->get();
- OSL_TRACE(" %p %d", pResource, iSharedResource->use_count());
- DBG_ASSERT(iSharedResource->unique(),
- "SdGlobalResource still held in ~SdGlobalResourceContainer");
- }
- }
-
- Implementation::XInterfaceResourceList::reverse_iterator iXInterfaceResource;
- for (iXInterfaceResource = mpImpl->maXInterfaceResources.rbegin();
- iXInterfaceResource != mpImpl->maXInterfaceResources.rend();
- ++iXInterfaceResource)
- {
- Reference<lang::XComponent> xComponent (*iXInterfaceResource, UNO_QUERY);
- *iXInterfaceResource = NULL;
- if (xComponent.is())
- xComponent->dispose();
- }
-
- DBG_ASSERT(Implementation::mpInstance == this,
- "~SdGlobalResourceContainer(): more than one instance of singleton");
- Implementation::mpInstance = NULL;
-}
-
-
-
-
-} // end of namespace sd
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */