From 9a053fc4db1d926824cf579cbfcabcd664618f9b Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 2 Jun 2019 16:00:54 -0700 Subject: [PATCH] Create base MapBuffer class and tests Summary: This diff creates the base classes for MapBuffer and its tests Reviewed By: shergin Differential Revision: D15550730 fbshipit-source-id: a5a47edebd7c3e1b8b2c3ad2006aee0f8bdb7866 --- ReactCommon/fabric/mapbuffer/MapBuffer.cpp | 18 +++++++++ ReactCommon/fabric/mapbuffer/MapBuffer.h | 37 +++++++++++++++++++ .../fabric/mapbuffer/tests/MapBufferTest.cpp | 14 +++++++ 3 files changed, 69 insertions(+) create mode 100644 ReactCommon/fabric/mapbuffer/MapBuffer.cpp create mode 100644 ReactCommon/fabric/mapbuffer/MapBuffer.h create mode 100644 ReactCommon/fabric/mapbuffer/tests/MapBufferTest.cpp diff --git a/ReactCommon/fabric/mapbuffer/MapBuffer.cpp b/ReactCommon/fabric/mapbuffer/MapBuffer.cpp new file mode 100644 index 00000000000..330890f8832 --- /dev/null +++ b/ReactCommon/fabric/mapbuffer/MapBuffer.cpp @@ -0,0 +1,18 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "MapBuffer.h" + +namespace facebook { +namespace react { + +MapBuffer::MapBuffer() {} + +MapBuffer::~MapBuffer() {} + +} // namespace react +} // namespace facebook diff --git a/ReactCommon/fabric/mapbuffer/MapBuffer.h b/ReactCommon/fabric/mapbuffer/MapBuffer.h new file mode 100644 index 00000000000..e92a6f40635 --- /dev/null +++ b/ReactCommon/fabric/mapbuffer/MapBuffer.h @@ -0,0 +1,37 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace facebook { +namespace react { + +/** + * MapBuffer is an optimized map format for transferring data like props between + * C++ and other platforms The implemenation of this map is optimized to: + * - be compact to optimize space when sparse (sparse is the common case). + * - be accessible through JNI with zero/minimal copying via ByteBuffer. + * - be Have excellent C++ single-write and many-read performance by maximizing + * CPU cache performance through compactness, data locality, and fixed offsets + * where possible. + * - be optimized for iteration and intersection against other maps, but with + * reasonably good random access as well. + * - Work recursively for nested maps/arrays. + * - Supports dynamic types that map to JSON. + * - Don't require mutability - single-write on creation. + * - have minimal APK size and build time impact. + */ +class MapBuffer { + public: + MapBuffer(); + virtual ~MapBuffer(); +}; + +} // namespace react +} // namespace facebook diff --git a/ReactCommon/fabric/mapbuffer/tests/MapBufferTest.cpp b/ReactCommon/fabric/mapbuffer/tests/MapBufferTest.cpp new file mode 100644 index 00000000000..591f24f22cf --- /dev/null +++ b/ReactCommon/fabric/mapbuffer/tests/MapBufferTest.cpp @@ -0,0 +1,14 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include + +#include + +TEST(MapBufferTest, testSomething) { + // TODO +}