blob: aebe3689fb4517d13211741f2c9a6efc4ed3fc89 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_SHELL_PLATFORM_DARWIN_COMMON_FRAMEWORK_SOURCE_FLUTTERSTANDARDCODECHELPER_H_
#define FLUTTER_SHELL_PLATFORM_DARWIN_COMMON_FRAMEWORK_SOURCE_FLUTTERSTANDARDCODECHELPER_H_
#include <CoreFoundation/CoreFoundation.h>
#include <stdbool.h>
#include <stdint.h>
#if defined(__cplusplus)
extern "C" {
#endif
// NOLINTBEGIN(google-runtime-int)
// Note: Update FlutterStandardFieldIsStandardType if this changes.
typedef enum {
// NOLINTBEGIN(readability-identifier-naming)
FlutterStandardFieldNil,
FlutterStandardFieldTrue,
FlutterStandardFieldFalse,
FlutterStandardFieldInt32,
FlutterStandardFieldInt64,
FlutterStandardFieldIntHex,
FlutterStandardFieldFloat64,
FlutterStandardFieldString,
FlutterStandardFieldUInt8Data,
FlutterStandardFieldInt32Data,
FlutterStandardFieldInt64Data,
FlutterStandardFieldFloat64Data,
FlutterStandardFieldList,
FlutterStandardFieldMap,
FlutterStandardFieldFloat32Data,
// NOLINTEND(readability-identifier-naming)
} FlutterStandardField;
static inline bool FlutterStandardFieldIsStandardType(uint8_t field) {
return field <= FlutterStandardFieldFloat32Data &&
field >= FlutterStandardFieldNil;
}
typedef enum {
// NOLINTBEGIN(readability-identifier-naming)
FlutterStandardCodecObjcTypeNil,
FlutterStandardCodecObjcTypeNSNumber,
FlutterStandardCodecObjcTypeNSString,
FlutterStandardCodecObjcTypeFlutterStandardTypedData,
FlutterStandardCodecObjcTypeNSData,
FlutterStandardCodecObjcTypeNSArray,
FlutterStandardCodecObjcTypeNSDictionary,
FlutterStandardCodecObjcTypeUnknown,
// NOLINTEND(readability-identifier-naming)
} FlutterStandardCodecObjcType;
// NOLINTBEGIN(google-objc-function-naming)
///////////////////////////////////////////////////////////////////////////////
///\name Reader Helpers
///@{
void FlutterStandardCodecHelperReadAlignment(unsigned long* location,
uint8_t alignment);
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);
CFStringRef FlutterStandardCodecHelperReadUTF8(unsigned long* location,
CFDataRef data);
CFTypeRef FlutterStandardCodecHelperReadValueOfType(
unsigned long* location,
CFDataRef data,
uint8_t type,
CFTypeRef (*ReadValue)(CFTypeRef),
CFTypeRef (*ReadTypedDataOfType)(FlutterStandardField, CFTypeRef),
CFTypeRef user_data);
///@}
///////////////////////////////////////////////////////////////////////////////
///\name Writer Helpers
///@{
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);
///@}
// NOLINTEND(google-objc-function-naming)
// NOLINTEND(google-runtime-int)
#if defined(__cplusplus)
}
#endif
#endif // FLUTTER_SHELL_PLATFORM_DARWIN_COMMON_FRAMEWORK_SOURCE_FLUTTERSTANDARDCODECHELPER_H_