| Flutter iOS Embedder |

Functions
FlutterStandardCodecHelper.cc File Reference
`#include "flutter/shell/platform/darwin/common/framework/Source/FlutterStandardCodecHelper.h"`
`#include <stdint.h>`
`#include <vector>`
`#include "flutter/fml/logging.h"`

Go to the source code of this file.

## Functions
void | FlutterStandardCodecHelperReadAlignment (unsigned long *location, uint8_t alignment)
static uint8_t | PeekByte (unsigned long location, CFDataRef data)
void | FlutterStandardCodecHelperReadBytes (unsigned long *location, unsigned long length, void *destination, CFDataRef data)
uint8_t | FlutterStandardCodecHelperReadByte (unsigned long *location, CFDataRef data)
uint32_t | FlutterStandardCodecHelperReadSize (unsigned long *location, CFDataRef data)
static CFDataRef | ReadDataNoCopy (unsigned long *location, unsigned long length, CFDataRef data)
CFStringRef | FlutterStandardCodecHelperReadUTF8 (unsigned long *location, CFDataRef data)
static CFTypeRef | FastReadValue (unsigned long *location, CFDataRef data, CFTypeRef(*ReadValue)(CFTypeRef), CFTypeRef(*ReadTypedDataOfType)(FlutterStandardField, CFTypeRef), CFTypeRef user_data)
CFTypeRef | FlutterStandardCodecHelperReadValueOfType (unsigned long *location, CFDataRef data, uint8_t type, CFTypeRef(*ReadValue)(CFTypeRef), CFTypeRef(*ReadTypedDataOfType)(FlutterStandardField, CFTypeRef), CFTypeRef user_data)
void | FlutterStandardCodecHelperWriteByte (CFMutableDataRef data, uint8_t value)
void | FlutterStandardCodecHelperWriteBytes (CFMutableDataRef data, const void *bytes, unsigned long length)
void | FlutterStandardCodecHelperWriteSize (CFMutableDataRef data, uint32_t size)
void | FlutterStandardCodecHelperWriteAlignment (CFMutableDataRef data, uint8_t alignment)
void | FlutterStandardCodecHelperWriteUTF8 (CFMutableDataRef data, CFStringRef value)
void | FlutterStandardCodecHelperWriteData (CFMutableDataRef data, CFDataRef value)
bool | FlutterStandardCodecHelperWriteNumber (CFMutableDataRef data, CFNumberRef number)

## Function Documentation

## ◆ FastReadValue()

static CFTypeRef FastReadValue | ( | unsigned long * | location,
|  | CFDataRef | data,
|  | CFTypeRef(*)(CFTypeRef) | ReadValue,
|  | CFTypeRef(*)(FlutterStandardField, CFTypeRef) | ReadTypedDataOfType,
|  | CFTypeRef | user_data
| ) |  |
| inline static

Definition at line 87 of file FlutterStandardCodecHelper.cc.

92 {
93 uint8_t type = PeekByte(*location, data);
94 if (FlutterStandardFieldIsStandardType(type)) {
95 *location += 1;
96 return FlutterStandardCodecHelperReadValueOfType(
97 location, data, type, ReadValue, ReadTypedDataOfType, user_data);
98 } else {
99 return ReadValue(user_data);
100 }
101 }

References FlutterStandardCodecHelperReadValueOfType(), FlutterStandardFieldIsStandardType(), PeekByte(), and user_data.

Referenced by FlutterStandardCodecHelperReadValueOfType().

## ◆ FlutterStandardCodecHelperReadAlignment()

void FlutterStandardCodecHelperReadAlignment | ( | unsigned long * | location,
|  | uint8_t | alignment
| ) |  |

Definition at line 18 of file FlutterStandardCodecHelper.cc.

19 {
20 uint8_t mod = *location % alignment;
21 if (mod) {
22 *location += (alignment - mod);
23 }
24 }

Referenced by FlutterStandardCodecHelperReadValueOfType(), and FlutterStandardReader::readAlignment:.

## ◆ FlutterStandardCodecHelperReadByte()

uint8_t FlutterStandardCodecHelperReadByte | ( | unsigned long * | location,
|  | CFDataRef | data
| ) |  |

Definition at line 42 of file FlutterStandardCodecHelper.cc.

43 {
44 uint8_t value;
45 FlutterStandardCodecHelperReadBytes(location, 1, &value, data);
46 return value;
47 }

References FlutterStandardCodecHelperReadBytes().

Referenced by FlutterStandardCodecHelperReadSize(), and FlutterStandardReader::readByte.

## ◆ FlutterStandardCodecHelperReadBytes()

void FlutterStandardCodecHelperReadBytes | ( | unsigned long * | location,
|  | unsigned long | length,
|  | void * | destination,
|  | CFDataRef | data
| ) |  |

Definition at line 33 of file FlutterStandardCodecHelper.cc.

36 {
37 CFRange range = CFRangeMake(*location, length);
38 CFDataGetBytes(data, range, static_cast<UInt8*>(destination));
39 *location += length;
40 }

Referenced by FlutterStandardCodecHelperReadByte(), FlutterStandardCodecHelperReadSize(), FlutterStandardCodecHelperReadValueOfType(), and FlutterStandardReader::readBytes:length:.

## ◆ FlutterStandardCodecHelperReadSize()

uint32_t FlutterStandardCodecHelperReadSize | ( | unsigned long * | location,
|  | CFDataRef | data
| ) |  |

Definition at line 49 of file FlutterStandardCodecHelper.cc.

50 {
51 uint8_t byte = FlutterStandardCodecHelperReadByte(location, data);
52 if (byte < 254) {
53 return (uint32_t)byte;
54 } else if (byte == 254) {
55 UInt16 value;
56 FlutterStandardCodecHelperReadBytes(location, 2, &value, data);
57 return value;
58 } else {
59 UInt32 value;
60 FlutterStandardCodecHelperReadBytes(location, 4, &value, data);
61 return value;
62 }
63 }

References FlutterStandardCodecHelperReadByte(), and FlutterStandardCodecHelperReadBytes().

Referenced by FlutterStandardCodecHelperReadUTF8(), FlutterStandardCodecHelperReadValueOfType(), and FlutterStandardReader::readSize.

## ◆ FlutterStandardCodecHelperReadUTF8()

CFStringRef FlutterStandardCodecHelperReadUTF8 | ( | unsigned long * | location,
|  | CFDataRef | data
| ) |  |

Definition at line 75 of file FlutterStandardCodecHelper.cc.

76 {
77 uint32_t size = FlutterStandardCodecHelperReadSize(location, data);
78 CFDataRef bytes = ReadDataNoCopy(location, size, data);
79 CFStringRef result = CFStringCreateFromExternalRepresentation(
80 kCFAllocatorDefault, bytes, kCFStringEncodingUTF8);
81 return static_cast<CFStringRef>(CFAutorelease(result));
82 }

References FlutterStandardCodecHelperReadSize(), and ReadDataNoCopy().

Referenced by FlutterStandardCodecHelperReadValueOfType(), and FlutterStandardReader::readUTF8.

## ◆ FlutterStandardCodecHelperReadValueOfType()

CFTypeRef FlutterStandardCodecHelperReadValueOfType | ( | unsigned long * | location,
|  | CFDataRef | data,
|  | uint8_t | type,
|  | CFTypeRef(*)(CFTypeRef) | ReadValue,
|  | CFTypeRef(*)(FlutterStandardField, CFTypeRef) | ReadTypedDataOfType,
|  | CFTypeRef | user_data
| ) |  |

Definition at line 103 of file FlutterStandardCodecHelper.cc.

109 {
110 FlutterStandardField field = (FlutterStandardField)type;
111 switch (field) {
112 case FlutterStandardFieldNil:
113 return nil;
114 case FlutterStandardFieldTrue:
115 return kCFBooleanTrue;
116 case FlutterStandardFieldFalse:
117 return kCFBooleanFalse;
118 case FlutterStandardFieldInt32: {
119 int32_t value;
120 FlutterStandardCodecHelperReadBytes(location, 4, &value, data);
121 return CFAutorelease(
122 CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &value));
123 }
124 case FlutterStandardFieldInt64: {
125 int64_t value;
126 FlutterStandardCodecHelperReadBytes(location, 8, &value, data);
127 return CFAutorelease(
128 CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt64Type, &value));
129 }
130 case FlutterStandardFieldFloat64: {
131 Float64 value;
132 FlutterStandardCodecHelperReadAlignment(location, 8);
133 FlutterStandardCodecHelperReadBytes(location, 8, &value, data);
134 return CFAutorelease(
135 CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &value));
136 }
137 case FlutterStandardFieldIntHex:
138 case FlutterStandardFieldString:
139 return FlutterStandardCodecHelperReadUTF8(location, data);
140 case FlutterStandardFieldUInt8Data:
141 case FlutterStandardFieldInt32Data:
142 case FlutterStandardFieldInt64Data:
143 case FlutterStandardFieldFloat32Data:
144 case FlutterStandardFieldFloat64Data:
145 return ReadTypedDataOfType(field, user_data);
146 case FlutterStandardFieldList: {
147 UInt32 length = FlutterStandardCodecHelperReadSize(location, data);
148 CFMutableArrayRef array = CFArrayCreateMutable(
149 kCFAllocatorDefault, length, &kCFTypeArrayCallBacks);
150 for (UInt32 i = 0; i < length; i++) {
151 CFTypeRef value = FastReadValue(location, data, ReadValue,
152 ReadTypedDataOfType, user_data);
153 CFArrayAppendValue(array, (value == nil ? kCFNull : value));
154 }
155 return CFAutorelease(array);
156 }
157 case FlutterStandardFieldMap: {
158 UInt32 size = FlutterStandardCodecHelperReadSize(location, data);
159 CFMutableDictionaryRef dict = CFDictionaryCreateMutable(
160 kCFAllocatorDefault, size, &kCFTypeDictionaryKeyCallBacks,
161 &kCFTypeDictionaryValueCallBacks);
162 for (UInt32 i = 0; i < size; i++) {
163 CFTypeRef key = FastReadValue(location, data, ReadValue,
164 ReadTypedDataOfType, user_data);
165 CFTypeRef val = FastReadValue(location, data, ReadValue,
166 ReadTypedDataOfType, user_data);
167 CFDictionaryAddValue(dict, (key == nil ? kCFNull : key),
168 (val == nil ? kCFNull : val));
169 }
170 return CFAutorelease(dict);
171 }
172 default:
173 // Malformed message.
174 FML_DCHECK(false);
175 }
176 }

References FastReadValue(), FlutterStandardCodecHelperReadAlignment(), FlutterStandardCodecHelperReadBytes(), FlutterStandardCodecHelperReadSize(), FlutterStandardCodecHelperReadUTF8(), FlutterStandardFieldFalse, FlutterStandardFieldFloat32Data, FlutterStandardFieldFloat64, FlutterStandardFieldFloat64Data, FlutterStandardFieldInt32, FlutterStandardFieldInt32Data, FlutterStandardFieldInt64, FlutterStandardFieldInt64Data, FlutterStandardFieldIntHex, FlutterStandardFieldList, FlutterStandardFieldMap, FlutterStandardFieldNil, FlutterStandardFieldString, FlutterStandardFieldTrue, FlutterStandardFieldUInt8Data, and user_data.

Referenced by FastReadValue(), and FlutterStandardReader::readValueOfType:.

## ◆ FlutterStandardCodecHelperWriteAlignment()

void FlutterStandardCodecHelperWriteAlignment | ( | CFMutableDataRef | data,
|  | uint8_t | alignment
| ) |  |

Definition at line 201 of file FlutterStandardCodecHelper.cc.

202 {
203 uint8_t mod = CFDataGetLength(data) % alignment;
204 if (mod) {
205 for (int i = 0; i < (alignment - mod); i++) {
206 FlutterStandardCodecHelperWriteByte(data, 0);
207 }
208 }
209 }

References FlutterStandardCodecHelperWriteByte().

Referenced by FlutterStandardCodecHelperWriteNumber(), and FlutterStandardWriter::writeAlignment:.

## ◆ FlutterStandardCodecHelperWriteByte()

void FlutterStandardCodecHelperWriteByte | ( | CFMutableDataRef | data,
|  | uint8_t | value
| ) |  |

Definition at line 178 of file FlutterStandardCodecHelper.cc.

178 {
179 CFDataAppendBytes(data, &value, 1);
180 }

Referenced by FlutterStandardCodecHelperWriteAlignment(), FlutterStandardCodecHelperWriteNumber(), FlutterStandardCodecHelperWriteSize(), and FlutterStandardWriter::writeByte:.

## ◆ FlutterStandardCodecHelperWriteBytes()

void FlutterStandardCodecHelperWriteBytes | ( | CFMutableDataRef | data,
|  | const void * | bytes,
|  | unsigned long | length
| ) |  |

Definition at line 182 of file FlutterStandardCodecHelper.cc.

184 {
185 CFDataAppendBytes(data, static_cast<const UInt8*>(bytes), length);
186 }

Referenced by FlutterStandardCodecHelperWriteData(), FlutterStandardCodecHelperWriteNumber(), FlutterStandardCodecHelperWriteSize(), FlutterStandardCodecHelperWriteUTF8(), and FlutterStandardWriter::writeBytes:length:.

## ◆ FlutterStandardCodecHelperWriteData()

void FlutterStandardCodecHelperWriteData | ( | CFMutableDataRef | data,
|  | CFDataRef | value
| ) |  |

Definition at line 232 of file FlutterStandardCodecHelper.cc.

233 {
234 const UInt8* bytes = CFDataGetBytePtr(value);
235 CFIndex length = CFDataGetLength(value);
236 FlutterStandardCodecHelperWriteBytes(data, bytes, length);
237 }

References FlutterStandardCodecHelperWriteBytes().

Referenced by FlutterStandardWriter::writeData:.

## ◆ FlutterStandardCodecHelperWriteNumber()

bool FlutterStandardCodecHelperWriteNumber | ( | CFMutableDataRef | data,
|  | CFNumberRef | number
| ) |  |

Definition at line 239 of file FlutterStandardCodecHelper.cc.

240 {
241 bool success = false;
242 if (CFGetTypeID(number) == CFBooleanGetTypeID()) {
243 bool b = CFBooleanGetValue((CFBooleanRef)number);
244 FlutterStandardCodecHelperWriteByte(
245 data, (b ? FlutterStandardFieldTrue : FlutterStandardFieldFalse));
246 success = true;
247 } else if (CFNumberIsFloatType(number)) {
248 Float64 f;
249 success = CFNumberGetValue(number, kCFNumberFloat64Type, &f);
250 if (success) {
251 FlutterStandardCodecHelperWriteByte(data, FlutterStandardFieldFloat64);
252 FlutterStandardCodecHelperWriteAlignment(data, 8);
253 FlutterStandardCodecHelperWriteBytes(data, &f, 8);
254 }
255 } else if (CFNumberGetByteSize(number) <= 4) {
256 SInt32 n;
257 success = CFNumberGetValue(number, kCFNumberSInt32Type, &n);
258 if (success) {
259 FlutterStandardCodecHelperWriteByte(data, FlutterStandardFieldInt32);
260 FlutterStandardCodecHelperWriteBytes(data, &n, 4);
261 }
262 } else if (CFNumberGetByteSize(number) <= 8) {
263 SInt64 n;
264 success = CFNumberGetValue(number, kCFNumberSInt64Type, &n);
265 if (success) {
266 FlutterStandardCodecHelperWriteByte(data, FlutterStandardFieldInt64);
267 FlutterStandardCodecHelperWriteBytes(data, &n, 8);
268 }
269 }
270 return success;
271 }

References FlutterStandardCodecHelperWriteAlignment(), FlutterStandardCodecHelperWriteByte(), FlutterStandardCodecHelperWriteBytes(), FlutterStandardFieldFalse, FlutterStandardFieldFloat64, FlutterStandardFieldInt32, FlutterStandardFieldInt64, and FlutterStandardFieldTrue.

## ◆ FlutterStandardCodecHelperWriteSize()

void FlutterStandardCodecHelperWriteSize | ( | CFMutableDataRef | data,
|  | uint32_t | size
| ) |  |

Definition at line 188 of file FlutterStandardCodecHelper.cc.

188 {
189 if (size < 254) {
190 FlutterStandardCodecHelperWriteByte(data, size);
191 } else if (size <= 0xffff) {
192 FlutterStandardCodecHelperWriteByte(data, 254);
193 UInt16 value = (UInt16)size;
194 FlutterStandardCodecHelperWriteBytes(data, &value, 2);
195 } else {
196 FlutterStandardCodecHelperWriteByte(data, 255);
197 FlutterStandardCodecHelperWriteBytes(data, &size, 4);
198 }
199 }

References FlutterStandardCodecHelperWriteByte(), and FlutterStandardCodecHelperWriteBytes().

Referenced by FlutterStandardCodecHelperWriteUTF8(), and FlutterStandardWriter::writeSize:.

## ◆ FlutterStandardCodecHelperWriteUTF8()

void FlutterStandardCodecHelperWriteUTF8 | ( | CFMutableDataRef | data,
|  | CFStringRef | value
| ) |  |

Definition at line 211 of file FlutterStandardCodecHelper.cc.

212 {
213 const char* utf8 = CFStringGetCStringPtr(value, kCFStringEncodingUTF8);
214 if (utf8) {
215 size_t length = strlen(utf8);
216 FlutterStandardCodecHelperWriteSize(data, length);
217 FlutterStandardCodecHelperWriteBytes(data, utf8, length);
218 } else {
219 CFIndex length = CFStringGetLength(value);
220 CFIndex used_length = 0;
221 // UTF16 length times 3 will fit all UTF8.
222 CFIndex buffer_length = length * 3;
223 std::vector<UInt8> buffer;
224 buffer.resize(buffer_length);
225 CFStringGetBytes(value, CFRangeMake(0, length), kCFStringEncodingUTF8, 0,
226 false, buffer.data(), buffer_length, &used_length);
227 FlutterStandardCodecHelperWriteSize(data, used_length);
228 FlutterStandardCodecHelperWriteBytes(data, buffer.data(), used_length);
229 }
230 }

References FlutterStandardCodecHelperWriteBytes(), and FlutterStandardCodecHelperWriteSize().

Referenced by FlutterStandardWriter::writeUTF8:.

## ◆ PeekByte()

static uint8_t PeekByte | ( | unsigned long | location,
|  | CFDataRef | data
| ) |  |
| static

Definition at line 26 of file FlutterStandardCodecHelper.cc.

26 {
27 uint8_t result;
28 CFRange range = CFRangeMake(location, 1);
29 CFDataGetBytes(data, range, &result);
30 return result;
31 }

Referenced by FastReadValue().

## ◆ ReadDataNoCopy()

static CFDataRef ReadDataNoCopy | ( | unsigned long * | location,
|  | unsigned long | length,
|  | CFDataRef | data
| ) |  |
| static

Definition at line 65 of file FlutterStandardCodecHelper.cc.

67 {
68 CFDataRef result = CFDataCreateWithBytesNoCopy(
69 kCFAllocatorDefault, CFDataGetBytePtr(data) + *location, length,
70 kCFAllocatorNull);
71 *location += length;
72 return static_cast<CFDataRef>(CFAutorelease(result));
73 }

Referenced by FlutterStandardCodecHelperReadUTF8().

FlutterStandardFieldInt64
@ FlutterStandardFieldInt64
Definition: FlutterStandardCodecHelper.h:25
FlutterStandardCodecHelperReadUTF8
CFStringRef FlutterStandardCodecHelperReadUTF8(unsigned long *location, CFDataRef data)
Definition: FlutterStandardCodecHelper.cc:75
FlutterStandardCodecHelperReadSize
uint32_t FlutterStandardCodecHelperReadSize(unsigned long *location, CFDataRef data)
Definition: FlutterStandardCodecHelper.cc:49
FlutterStandardFieldList
@ FlutterStandardFieldList
Definition: FlutterStandardCodecHelper.h:33
user_data
void * user_data
Definition: texture_registrar_unittests.cc:27
FlutterStandardFieldFloat64
@ FlutterStandardFieldFloat64
Definition: FlutterStandardCodecHelper.h:27
FlutterStandardFieldFloat32Data
@ FlutterStandardFieldFloat32Data
Definition: FlutterStandardCodecHelper.h:35
FlutterStandardCodecHelperWriteAlignment
void FlutterStandardCodecHelperWriteAlignment(CFMutableDataRef data, uint8_t alignment)
Definition: FlutterStandardCodecHelper.cc:201
FlutterStandardCodecHelperReadByte
uint8_t FlutterStandardCodecHelperReadByte(unsigned long *location, CFDataRef data)
Definition: FlutterStandardCodecHelper.cc:42
FlutterStandardFieldInt32
@ FlutterStandardFieldInt32
Definition: FlutterStandardCodecHelper.h:24
FlutterStandardCodecHelperReadValueOfType
CFTypeRef FlutterStandardCodecHelperReadValueOfType(unsigned long *location, CFDataRef data, uint8_t type, CFTypeRef(*ReadValue)(CFTypeRef), CFTypeRef(*ReadTypedDataOfType)(FlutterStandardField, CFTypeRef), CFTypeRef user_data)
Definition: FlutterStandardCodecHelper.cc:103
FlutterStandardFieldString
@ FlutterStandardFieldString
Definition: FlutterStandardCodecHelper.h:28
FlutterStandardFieldInt32Data
@ FlutterStandardFieldInt32Data
Definition: FlutterStandardCodecHelper.h:30
FlutterStandardFieldFalse
@ FlutterStandardFieldFalse
Definition: FlutterStandardCodecHelper.h:23
FlutterStandardFieldUInt8Data
@ FlutterStandardFieldUInt8Data
Definition: FlutterStandardCodecHelper.h:29
ReadDataNoCopy
static CFDataRef ReadDataNoCopy(unsigned long *location, unsigned long length, CFDataRef data)
Definition: FlutterStandardCodecHelper.cc:65
FlutterStandardFieldIsStandardType
static bool FlutterStandardFieldIsStandardType(uint8_t field)
Definition: FlutterStandardCodecHelper.h:39
FlutterStandardFieldTrue
@ FlutterStandardFieldTrue
Definition: FlutterStandardCodecHelper.h:22
FlutterStandardCodecHelperReadBytes
void FlutterStandardCodecHelperReadBytes(unsigned long *location, unsigned long length, void *destination, CFDataRef data)
Definition: FlutterStandardCodecHelper.cc:33
FlutterStandardCodecHelperWriteSize
void FlutterStandardCodecHelperWriteSize(CFMutableDataRef data, uint32_t size)
Definition: FlutterStandardCodecHelper.cc:188
FlutterStandardField
FlutterStandardField
Definition: FlutterStandardCodecHelper.h:19
FastReadValue
static CFTypeRef FastReadValue(unsigned long *location, CFDataRef data, CFTypeRef(*ReadValue)(CFTypeRef), CFTypeRef(*ReadTypedDataOfType)(FlutterStandardField, CFTypeRef), CFTypeRef user_data)
Definition: FlutterStandardCodecHelper.cc:87
FlutterStandardCodecHelperWriteBytes
void FlutterStandardCodecHelperWriteBytes(CFMutableDataRef data, const void *bytes, unsigned long length)
Definition: FlutterStandardCodecHelper.cc:182
FlutterStandardCodecHelperReadAlignment
void FlutterStandardCodecHelperReadAlignment(unsigned long *location, uint8_t alignment)
Definition: FlutterStandardCodecHelper.cc:18
FlutterStandardFieldNil
@ FlutterStandardFieldNil
Definition: FlutterStandardCodecHelper.h:21
FlutterStandardFieldMap
@ FlutterStandardFieldMap
Definition: FlutterStandardCodecHelper.h:34
PeekByte
static uint8_t PeekByte(unsigned long location, CFDataRef data)
Definition: FlutterStandardCodecHelper.cc:26
FlutterStandardCodecHelperWriteByte
void FlutterStandardCodecHelperWriteByte(CFMutableDataRef data, uint8_t value)
Definition: FlutterStandardCodecHelper.cc:178
FlutterStandardFieldFloat64Data
@ FlutterStandardFieldFloat64Data
Definition: FlutterStandardCodecHelper.h:32
FlutterStandardFieldInt64Data
@ FlutterStandardFieldInt64Data
Definition: FlutterStandardCodecHelper.h:31
FlutterStandardFieldIntHex
@ FlutterStandardFieldIntHex
Definition: FlutterStandardCodecHelper.h:26