فهرست منبع

LibGfx: Introduce ICC::Profile::create

This can be used to programmatically create ICC::Profile objects.
Nico Weber 2 سال پیش
والد
کامیت
8f415e7b21
2فایلهای تغییر یافته به همراه13 افزوده شده و 7 حذف شده
  1. 6 1
      Userland/Libraries/LibGfx/ICC/Profile.cpp
  2. 7 6
      Userland/Libraries/LibGfx/ICC/Profile.h

+ 6 - 1
Userland/Libraries/LibGfx/ICC/Profile.cpp

@@ -1316,7 +1316,12 @@ ErrorOr<NonnullRefPtr<Profile>> Profile::try_load_from_externally_owned_memory(R
     bytes = bytes.trim(header.on_disk_size);
     auto tag_table = TRY(read_tag_table(bytes));
 
-    auto profile = TRY(try_make_ref_counted<Profile>(header, move(tag_table)));
+    return create(header, move(tag_table));
+}
+
+ErrorOr<NonnullRefPtr<Profile>> Profile::create(ProfileHeader const& header, OrderedHashMap<TagSignature, NonnullRefPtr<TagData>> tag_table)
+{
+    auto profile = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) Profile(header, move(tag_table))));
 
     TRY(profile->check_required_tags());
     TRY(profile->check_tag_types());

+ 7 - 6
Userland/Libraries/LibGfx/ICC/Profile.h

@@ -211,12 +211,7 @@ struct ProfileHeader {
 class Profile : public RefCounted<Profile> {
 public:
     static ErrorOr<NonnullRefPtr<Profile>> try_load_from_externally_owned_memory(ReadonlyBytes);
-
-    Profile(ProfileHeader const& header, OrderedHashMap<TagSignature, NonnullRefPtr<TagData>> tag_table)
-        : m_header(header)
-        , m_tag_table(move(tag_table))
-    {
-    }
+    static ErrorOr<NonnullRefPtr<Profile>> create(ProfileHeader const& header, OrderedHashMap<TagSignature, NonnullRefPtr<TagData>> tag_table);
 
     Optional<PreferredCMMType> preferred_cmm_type() const { return m_header.preferred_cmm_type; }
     Version version() const { return m_header.version; }
@@ -262,6 +257,12 @@ public:
     bool is_v4() const { return version().major_version() == 4; }
 
 private:
+    Profile(ProfileHeader const& header, OrderedHashMap<TagSignature, NonnullRefPtr<TagData>> tag_table)
+        : m_header(header)
+        , m_tag_table(move(tag_table))
+    {
+    }
+
     ErrorOr<void> check_required_tags();
     ErrorOr<void> check_tag_types();