File indexing completed on 2025-02-09 04:28:36

0001 /*
0002   This file is part of the KTextTemplate library
0003 
0004   SPDX-FileCopyrightText: 2010 Stephen Kelly <steveire@gmail.com>
0005 
0006   SPDX-License-Identifier: LGPL-2.1-or-later
0007 
0008 */
0009 
0010 #include "cachingloaderdecorator.h"
0011 
0012 namespace KTextTemplate
0013 {
0014 
0015 class CachingLoaderDecoratorPrivate
0016 {
0017 public:
0018     CachingLoaderDecoratorPrivate(QSharedPointer<AbstractTemplateLoader> loader, CachingLoaderDecorator *qq)
0019         : q_ptr(qq)
0020         , m_wrappedLoader(loader)
0021     {
0022     }
0023 
0024     Q_DECLARE_PUBLIC(CachingLoaderDecorator)
0025     CachingLoaderDecorator *const q_ptr;
0026 
0027     const QSharedPointer<AbstractTemplateLoader> m_wrappedLoader;
0028 
0029     mutable QHash<QString, Template> m_cache;
0030 };
0031 }
0032 
0033 using namespace KTextTemplate;
0034 
0035 CachingLoaderDecorator::CachingLoaderDecorator(QSharedPointer<AbstractTemplateLoader> loader)
0036     : d_ptr(new CachingLoaderDecoratorPrivate(loader, this))
0037 {
0038 }
0039 
0040 CachingLoaderDecorator::~CachingLoaderDecorator()
0041 {
0042     delete d_ptr;
0043 }
0044 
0045 bool CachingLoaderDecorator::canLoadTemplate(const QString &name) const
0046 {
0047     Q_D(const CachingLoaderDecorator);
0048     return d->m_wrappedLoader->canLoadTemplate(name);
0049 }
0050 
0051 void CachingLoaderDecorator::clear()
0052 {
0053     Q_D(CachingLoaderDecorator);
0054     return d->m_cache.clear();
0055 }
0056 
0057 int CachingLoaderDecorator::size() const
0058 {
0059     Q_D(const CachingLoaderDecorator);
0060     return d->m_cache.size();
0061 }
0062 
0063 bool CachingLoaderDecorator::isEmpty() const
0064 {
0065     Q_D(const CachingLoaderDecorator);
0066     return d->m_cache.isEmpty();
0067 }
0068 
0069 std::pair<QString, QString> CachingLoaderDecorator::getMediaUri(const QString &fileName) const
0070 {
0071     Q_D(const CachingLoaderDecorator);
0072     return d->m_wrappedLoader->getMediaUri(fileName);
0073 }
0074 
0075 Template CachingLoaderDecorator::loadByName(const QString &name, const KTextTemplate::Engine *engine) const
0076 {
0077     Q_D(const CachingLoaderDecorator);
0078     const auto it = d->m_cache.constFind(name);
0079     if (it != d->m_cache.constEnd()) {
0080         return it.value();
0081     }
0082 
0083     const auto t = d->m_wrappedLoader->loadByName(name, engine);
0084 
0085     d->m_cache.insert(name, t);
0086 
0087     return t;
0088 }