22#include <../cache/SlsCacheConfiguration.hxx>
27#include <com/sun/star/frame/Desktop.hpp>
56SdGlobalResourceContainerInstance& theSdGlobalResourceContainerInstance()
58 static SdGlobalResourceContainerInstance SINGLETON;
96 ::std::unique_ptr<SdGlobalResource> pResource)
98 std::unique_lock aGuard (
mpImpl->maMutex);
100 assert( std::none_of(
101 mpImpl->maResources.begin(),
102 mpImpl->maResources.end(),
103 [&](
const std::unique_ptr<SdGlobalResource>&
p) { return p == pResource; })
104 &&
"duplicate resource?");
106 mpImpl->maResources.push_back(std::move(pResource));
110 const std::shared_ptr<SdGlobalResource>& pResource)
112 std::unique_lock aGuard (
mpImpl->maMutex);
114 Implementation::SharedResourceList::iterator iResource = ::std::find (
115 mpImpl->maSharedResources.begin(),
116 mpImpl->maSharedResources.end(),
118 if (iResource ==
mpImpl->maSharedResources.end())
119 mpImpl->maSharedResources.push_back(pResource);
123 "SdGlobalResourceContainer:AddResource(): Resource added twice.");
129 std::unique_lock aGuard (
mpImpl->maMutex);
131 Implementation::XInterfaceResourceList::iterator iResource = ::std::find (
132 mpImpl->maXInterfaceResources.begin(),
133 mpImpl->maXInterfaceResources.end(),
135 if (iResource ==
mpImpl->maXInterfaceResources.end())
136 mpImpl->maXInterfaceResources.push_back(rxResource);
140 "SdGlobalResourceContainer:AddResource(): Resource added twice.");
151 std::unique_lock aGuard (
mpImpl->maMutex);
157 for (
auto iResource =
mpImpl->maResources.rbegin();
158 iResource !=
mpImpl->maResources.rend();
167 Implementation::SharedResourceList::reverse_iterator iSharedResource;
168 for (iSharedResource =
mpImpl->maSharedResources.rbegin();
169 iSharedResource !=
mpImpl->maSharedResources.rend();
172 if (iSharedResource->use_count() > 1)
176 "sd.tools", pResource <<
" " << iSharedResource->use_count());
178 "SdGlobalResource still held in ~SdGlobalResourceContainer");
182 Implementation::XInterfaceResourceList::reverse_iterator iXInterfaceResource;
183 for (iXInterfaceResource =
mpImpl->maXInterfaceResources.rbegin();
184 iXInterfaceResource !=
mpImpl->maXInterfaceResources.rend();
185 ++iXInterfaceResource)
187 Reference<lang::XComponent> xComponent (*iXInterfaceResource, UNO_QUERY);
188 *iXInterfaceResource =
nullptr;
190 xComponent->dispose();
unique_disposing_solar_mutex_reset_ptr(const css::uno::Reference< css::lang::XComponent > &rComponent, T *p=nullptr, bool bComponent=false)
SdGlobalResourceContainerInstance()
::std::vector< Reference< XInterface > > XInterfaceResourceList
std::vector< std::unique_ptr< SdGlobalResource > > maResources
All instances of SdGlobalResource in this vector are owned by the container and will be destroyed whe...
::std::vector< std::shared_ptr< SdGlobalResource > > SharedResourceList
SharedResourceList maSharedResources
XInterfaceResourceList maXInterfaceResources
The purpose of this container is to hold references to resources that are globally available to all i...
void AddResource(::std::unique_ptr< SdGlobalResource > pResource)
Add a resource to the container.
static SdGlobalResourceContainer & Instance()
~SdGlobalResourceContainer()
SdGlobalResourceContainer()
::std::unique_ptr< Implementation > mpImpl
#define DBG_ASSERT(sCon, aError)
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
Reference< XComponentContext > getProcessComponentContext()
css::uno::Reference< css::deployment::XPackageRegistry > create(css::uno::Reference< css::deployment::XPackageRegistry > const &xRootRegistry, OUString const &context, OUString const &cachePath, css::uno::Reference< css::uno::XComponentContext > const &xComponentContext)
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)