/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
class SdGlobalResourceContainer::Implementation
{ private: friendclass SdGlobalResourceContainer;
std::mutex maMutex;
/** All instances of SdGlobalResource in this vector are owned by the container and will be destroyed when the container is destroyed.
*/
std::vector<std::unique_ptr<SdGlobalResource>> maResources;
// static
SdGlobalResourceContainer& SdGlobalResourceContainer::Instance()
{
SdGlobalResourceContainer *const pRet(theSdGlobalResourceContainerInstance().get());
assert(pRet); // error if it has been deleted and is null return *pRet;
}
// 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. for (auto iResource = mpImpl->maResources.rbegin();
iResource != mpImpl->maResources.rend();
++iResource)
{
iResource->reset();
}
// 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->use_count() > 1)
{
SdGlobalResource* pResource = iSharedResource->get();
SAL_INFO( "sd.tools", pResource << " " << iSharedResource->use_count());
DBG_ASSERT(iSharedResource->use_count() == 1, "SdGlobalResource still held in ~SdGlobalResourceContainer");
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.