Files
react-native/ReactCommon/react/renderer/core/RawPropsKey.cpp
T
Joshua Gross b3930f935f Convert most Fabric Cxx code to use react_native_assert instead of assert
Summary:
See react_native_assert.{h,cpp}. Because of the BUCK+Android issue where NDEBUG is always defined, we use react_native_assert instead of assert to enable xplat asserts in debug/dev mode.

This migrates most of the codebase, but probably not 100%. The goal is to increase assertion coverage on Android, not to get to 100% (yet).

Changelog: [Internal]

Reviewed By: RSNara

Differential Revision: D26562866

fbshipit-source-id: a7bf2055b973e1d3650ed8d68a6d02d556604af9
2021-02-19 20:52:52 -08:00

64 lines
1.6 KiB
C++

/*
* 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 "RawPropsKey.h"
#include <cassert>
#include <cstring>
#include <react/debug/react_native_assert.h>
#include <react/renderer/core/RawPropsPrimitives.h>
namespace facebook {
namespace react {
void RawPropsKey::render(char *buffer, RawPropsPropNameLength *length)
const noexcept {
*length = 0;
// Prefix
if (prefix) {
auto prefixLength = std::strlen(prefix);
std::memcpy(buffer, prefix, prefixLength);
*length = prefixLength;
}
// Name
auto nameLength = std::strlen(name);
std::memcpy(buffer + *length, name, nameLength);
*length += nameLength;
// Suffix
if (suffix) {
int suffixLength = std::strlen(suffix);
std::memcpy(buffer + *length, suffix, suffixLength);
*length += suffixLength;
}
react_native_assert(*length < kPropNameLengthHardCap);
}
RawPropsKey::operator std::string() const noexcept {
char buffer[kPropNameLengthHardCap];
RawPropsPropNameLength length = 0;
render(buffer, &length);
react_native_assert(length < kPropNameLengthHardCap);
return std::string{buffer, length};
}
bool operator==(RawPropsKey const &lhs, RawPropsKey const &rhs) noexcept {
// Note: We check the name first.
return lhs.name == rhs.name && lhs.prefix == rhs.prefix &&
lhs.suffix == rhs.suffix;
}
bool operator!=(RawPropsKey const &lhs, RawPropsKey const &rhs) noexcept {
return !(lhs == rhs);
}
} // namespace react
} // namespace facebook