File indexing completed on 2024-05-12 15:59:55
0001 /* 0002 * SPDX-FileCopyrightText: 2021 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #include "KoResourceLoadResult.h" 0007 0008 #include <boost/variant.hpp> 0009 0010 #include <KoResource.h> 0011 0012 struct KoResourceLoadResult::Private 0013 { 0014 // XXX: this should take a monostate for null resources 0015 boost::variant<KoResourceSP, KoEmbeddedResource, KoResourceSignature> value; 0016 }; 0017 0018 KoResourceLoadResult::KoResourceLoadResult(KoResourceSP resource) 0019 : m_d(new Private) 0020 { 0021 m_d->value = resource; 0022 } 0023 0024 KoResourceLoadResult::KoResourceLoadResult(KoEmbeddedResource embeddedResource) 0025 : m_d(new Private) 0026 { 0027 m_d->value = embeddedResource; 0028 } 0029 0030 KoResourceLoadResult::KoResourceLoadResult(KoResourceSignature signature) 0031 : m_d(new Private) 0032 { 0033 m_d->value = signature; 0034 } 0035 0036 KoResourceLoadResult::KoResourceLoadResult(const KoResourceLoadResult &rhs) 0037 : m_d(new Private(*rhs.m_d)) 0038 { 0039 } 0040 0041 KoResourceLoadResult &KoResourceLoadResult::operator=(const KoResourceLoadResult &rhs) 0042 { 0043 m_d->value = rhs.m_d->value; 0044 return *this; 0045 } 0046 0047 KoResourceLoadResult::~KoResourceLoadResult() 0048 { 0049 } 0050 0051 KoResourceSP KoResourceLoadResult::resource() const 0052 { 0053 return m_d->value.which() == 0 ? boost::get<KoResourceSP>(m_d->value) : KoResourceSP(); 0054 } 0055 0056 KoEmbeddedResource KoResourceLoadResult::embeddedResource() const 0057 { 0058 return m_d->value.which() == 1 ? boost::get<KoEmbeddedResource>(m_d->value) : KoEmbeddedResource(); 0059 } 0060 0061 KoResourceSignature KoResourceLoadResult::signature() const 0062 { 0063 class SignatureVisitor : public boost::static_visitor<KoResourceSignature> 0064 { 0065 public: 0066 KoResourceSignature operator()(KoResourceSP resource) const 0067 { 0068 return resource->signature(); 0069 } 0070 0071 KoResourceSignature operator()(const KoEmbeddedResource &embeddedResource) const 0072 { 0073 return embeddedResource.signature(); 0074 } 0075 0076 KoResourceSignature operator()(const KoResourceSignature &signature) const 0077 { 0078 return signature; 0079 } 0080 }; 0081 0082 return boost::apply_visitor(SignatureVisitor(), m_d->value); 0083 } 0084 0085 KoResourceLoadResult::Type KoResourceLoadResult::type() const 0086 { 0087 Type result = FailedLink; 0088 0089 switch (m_d->value.which()) 0090 { 0091 case 0: 0092 result = ExistingResource; 0093 break; 0094 case 1: 0095 result = EmbeddedResource; 0096 break; 0097 default: 0098 result = FailedLink; 0099 } 0100 0101 return result; 0102 }