File indexing completed on 2024-05-12 05:28:18

0001 // SPDX-FileCopyrightText: 2004 Marc Mutz <mutz@kde.org>,
0002 // SPDX-FileCopyrightText: 2004 Ingo Kloecker <kloecker@kde.org>
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004 
0005 #pragma once
0006 
0007 #include <QByteArray>
0008 #include <map>
0009 #include <memory>
0010 
0011 namespace MimeTreeParser
0012 {
0013 
0014 namespace Interface
0015 {
0016 class BodyPartFormatter;
0017 }
0018 
0019 struct ltstr {
0020     bool operator()(const char *s1, const char *s2) const
0021     {
0022         return qstricmp(s1, s2) < 0;
0023     }
0024 };
0025 
0026 typedef std::multimap<const char *, Interface::BodyPartFormatter *, ltstr> SubtypeRegistry;
0027 typedef std::map<const char *, MimeTreeParser::SubtypeRegistry, MimeTreeParser::ltstr> TypeRegistry;
0028 
0029 class BodyPartFormatterBaseFactoryPrivate;
0030 
0031 class BodyPartFormatterBaseFactory
0032 {
0033 public:
0034     BodyPartFormatterBaseFactory();
0035     ~BodyPartFormatterBaseFactory();
0036 
0037     const SubtypeRegistry &subtypeRegistry(const char *type) const;
0038 
0039 protected:
0040     void insert(const char *type, const char *subtype, Interface::BodyPartFormatter *formatter);
0041 
0042 private:
0043     static BodyPartFormatterBaseFactory *mSelf;
0044 
0045     std::unique_ptr<BodyPartFormatterBaseFactoryPrivate> d;
0046     friend class BodyPartFormatterBaseFactoryPrivate;
0047 
0048 private:
0049     // disabled
0050     const BodyPartFormatterBaseFactory &operator=(const BodyPartFormatterBaseFactory &);
0051     BodyPartFormatterBaseFactory(const BodyPartFormatterBaseFactory &);
0052 };
0053 
0054 }