Flutter Engine
The Flutter Engine
SkDataTable.h
Go to the documentation of this file.
1/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkDataTable_DEFINED
9#define SkDataTable_DEFINED
10
14
15#include <cstdint>
16#include <cstring>
17
18/**
19 * Like SkData, SkDataTable holds an immutable data buffer. The data buffer is
20 * organized into a table of entries, each with a length, so the entries are
21 * not required to all be the same size.
22 */
23class SK_API SkDataTable : public SkRefCnt {
24public:
25 /**
26 * Returns true if the table is empty (i.e. has no entries).
27 */
28 bool isEmpty() const { return 0 == fCount; }
29
30 /**
31 * Return the number of entries in the table. 0 for an empty table
32 */
33 int count() const { return fCount; }
34
35 /**
36 * Return the size of the index'th entry in the table. The caller must
37 * ensure that index is valid for this table.
38 */
39 size_t atSize(int index) const;
40
41 /**
42 * Return a pointer to the data of the index'th entry in the table.
43 * The caller must ensure that index is valid for this table.
44 *
45 * @param size If non-null, this returns the byte size of this entry. This
46 * will be the same value that atSize(index) would return.
47 */
48 const void* at(int index, size_t* size = nullptr) const;
49
50 template <typename T>
51 const T* atT(int index, size_t* size = nullptr) const {
52 return reinterpret_cast<const T*>(this->at(index, size));
53 }
54
55 /**
56 * Returns the index'th entry as a c-string, and assumes that the trailing
57 * null byte had been copied into the table as well.
58 */
59 const char* atStr(int index) const {
60 size_t size;
61 const char* str = this->atT<const char>(index, &size);
62 SkASSERT(strlen(str) + 1 == size);
63 return str;
64 }
65
66 typedef void (*FreeProc)(void* context);
67
68 static sk_sp<SkDataTable> MakeEmpty();
69
70 /**
71 * Return a new DataTable that contains a copy of the data stored in each
72 * "array".
73 *
74 * @param ptrs array of points to each element to be copied into the table.
75 * @param sizes array of byte-lengths for each entry in the corresponding
76 * ptrs[] array.
77 * @param count the number of array elements in ptrs[] and sizes[] to copy.
78 */
79 static sk_sp<SkDataTable> MakeCopyArrays(const void * const * ptrs,
80 const size_t sizes[], int count);
81
82 /**
83 * Return a new table that contains a copy of the data in array.
84 *
85 * @param array contiguous array of data for all elements to be copied.
86 * @param elemSize byte-length for a given element.
87 * @param count the number of entries to be copied out of array. The number
88 * of bytes that will be copied is count * elemSize.
89 */
90 static sk_sp<SkDataTable> MakeCopyArray(const void* array, size_t elemSize, int count);
91
92 static sk_sp<SkDataTable> MakeArrayProc(const void* array, size_t elemSize, int count,
93 FreeProc proc, void* context);
94
95private:
96 struct Dir {
97 const void* fPtr;
98 uintptr_t fSize;
99 };
100
101 int fCount;
102 size_t fElemSize;
103 union {
104 const Dir* fDir;
105 const char* fElems;
106 } fU;
107
108 FreeProc fFreeProc;
109 void* fFreeProcContext;
110
111 SkDataTable();
112 SkDataTable(const void* array, size_t elemSize, int count,
113 FreeProc, void* context);
114 SkDataTable(const Dir*, int count, FreeProc, void* context);
115 ~SkDataTable() override;
116
117 friend class SkDataTableBuilder; // access to Dir
118
119 using INHERITED = SkRefCnt;
120};
121
122#endif
int count
Definition: FontMgrTest.cpp:50
#define SK_API
Definition: SkAPI.h:35
#define SkASSERT(cond)
Definition: SkAssert.h:116
int count() const
Definition: SkDataTable.h:33
const char * atStr(int index) const
Definition: SkDataTable.h:59
const T * atT(int index, size_t *size=nullptr) const
Definition: SkDataTable.h:51
const char * fElems
Definition: SkDataTable.h:105
bool isEmpty() const
Definition: SkDataTable.h:28
const Dir * fDir
Definition: SkDataTable.h:104
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
Definition: switches.h:259
#define T
Definition: precompiler.cc:65