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 }