File indexing completed on 2024-05-19 04:27:43
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 <variant> 0009 #include <KisMpl.h> 0010 0011 #include <KoResource.h> 0012 0013 struct KoResourceLoadResult::Private 0014 { 0015 // XXX: this should take a monostate for null resources 0016 // AAA: no, it shouldn't, null resource must be a KoResourceSignature only 0017 std::variant<KoResourceSP, KoEmbeddedResource, KoResourceSignature> value; 0018 }; 0019 0020 KoResourceLoadResult::KoResourceLoadResult(KoResourceSP resource) 0021 : m_d(new Private) 0022 { 0023 m_d->value = resource; 0024 } 0025 0026 KoResourceLoadResult::KoResourceLoadResult(KoEmbeddedResource embeddedResource) 0027 : m_d(new Private) 0028 { 0029 m_d->value = embeddedResource; 0030 } 0031 0032 KoResourceLoadResult::KoResourceLoadResult(KoResourceSignature signature) 0033 : m_d(new Private) 0034 { 0035 m_d->value = signature; 0036 } 0037 0038 KoResourceLoadResult::KoResourceLoadResult(const KoResourceLoadResult &rhs) 0039 : m_d(new Private(*rhs.m_d)) 0040 { 0041 } 0042 0043 KoResourceLoadResult &KoResourceLoadResult::operator=(const KoResourceLoadResult &rhs) 0044 { 0045 m_d->value = rhs.m_d->value; 0046 return *this; 0047 } 0048 0049 KoResourceLoadResult::~KoResourceLoadResult() 0050 { 0051 } 0052 0053 KoResourceSP KoResourceLoadResult::resource() const noexcept 0054 { 0055 return std::holds_alternative<KoResourceSP>(m_d->value) ? std::get<KoResourceSP>(m_d->value) : KoResourceSP(); 0056 } 0057 0058 KoEmbeddedResource KoResourceLoadResult::embeddedResource() const noexcept 0059 { 0060 return std::holds_alternative<KoEmbeddedResource>(m_d->value) ? std::get<KoEmbeddedResource>(m_d->value) : KoEmbeddedResource(); 0061 } 0062 0063 KoResourceSignature KoResourceLoadResult::signature() const 0064 { 0065 return std::visit( 0066 kismpl::overloaded { 0067 [](const KoResourceSignature &signature) { return signature; }, 0068 [](const KoResourceSP &resource) { return resource->signature(); }, 0069 [](const KoEmbeddedResource &resource) { return resource.signature(); } 0070 }, m_d->value); 0071 } 0072 0073 KoResourceLoadResult::Type KoResourceLoadResult::type() const 0074 { 0075 return std::visit( 0076 kismpl::overloaded { 0077 [](auto) { return FailedLink; }, 0078 [](const KoResourceSP &) { return ExistingResource; }, 0079 [](const KoEmbeddedResource &) { return EmbeddedResource; } 0080 }, m_d->value); 0081 }