27 uint32_t index = fFactorySet.
find(factory);
32 if (
nullptr ==
name) {
36 return fFactorySet.
add(factory);
40 if (fNextAddedFactory < fNames.
size()) {
41 return fNames[fNextAddedFactory++];
70struct EntryComparator {
71 bool operator()(
const Entry&
a,
const Entry&
b)
const {
72 return strcmp(
a.fName,
b.fName) < 0;
74 bool operator()(
const Entry&
a,
const char*
b)
const {
75 return strcmp(
a.fName,
b) < 0;
77 bool operator()(
const char*
a,
const Entry&
b)
const {
78 return strcmp(
a,
b.fName) < 0;
87void SkFlattenable::Finalize() {
88 std::sort(gEntries, gEntries + gCount, EntryComparator());
94 SkASSERT(gCount < (
int)std::size(gEntries));
96 gEntries[gCount].fName =
name;
97 gEntries[gCount].fFactory = factory;
102 RegisterFlattenablesIfNeeded();
104 SkASSERT(std::is_sorted(gEntries, gEntries + gCount, EntryComparator()));
105 auto pair = std::equal_range(gEntries, gEntries + gCount,
name, EntryComparator());
106 if (pair.first == pair.second) {
109 return pair.first->fFactory;
113 RegisterFlattenablesIfNeeded();
115 const Entry* entries = gEntries;
116 for (
int i = gCount - 1; i >= 0; --i) {
117 if (entries[i].fFactory == fact) {
118 return entries[i].fName;
155 buffer.setDeserialProcs(*procs);
void writeFlattenable(const SkFlattenable *flattenable) override
size_t bytesWritten() const
bool usingInitialStorage() const
void writeToMemory(void *dst) const
static sk_sp< SkData > MakeUninitialized(size_t length)
sk_sp< SkFlattenable >(* Factory)(SkReadBuffer &)
static const char * FactoryToName(Factory)
sk_sp< SkData > serialize(const SkSerialProcs *=nullptr) const
static sk_sp< SkFlattenable > Deserialize(Type, const void *data, size_t length, const SkDeserialProcs *procs=nullptr)
static void Register(const char name[], Factory)
static Factory NameToFactory(const char name[])
const char * getNextAddedFactoryName()
uint32_t find(SkFlattenable::Factory)
void incPtr(void *) override
void decPtr(void *) override
static const uint8_t buffer[]