Skip to content

Commit 3c1e2c2

Browse files
committed
cleanup the code on arraysize and endian handling
1 parent 71de2ab commit 3c1e2c2

File tree

4 files changed

+39
-45
lines changed

4 files changed

+39
-45
lines changed

src/common.h

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,6 @@ typedef uint32_t char32;
4545

4646
static constexpr uint32_t kUnicodeError = 0xFFFD;
4747

48-
template <typename T, size_t N>
49-
char (&ArraySizeHelper(T (&array)[N]))[N];
50-
51-
#ifndef _MSC_VER
52-
template <typename T, size_t N>
53-
char (&ArraySizeHelper(const T (&array)[N]))[N];
54-
#endif // !_MSC_VER
55-
56-
#define arraysize(array) (sizeof(ArraySizeHelper(array)))
57-
5848
#if defined(_FREEBSD)
5949
#include <sys/endian.h>
6050
#endif
@@ -77,6 +67,14 @@ inline uint32_t Swap32(uint32_t x) { return __builtin_bswap32(x); }
7767
#endif // OS_WIN
7868
} // namespace util
7969

70+
constexpr bool is_bigendian() {
71+
#ifdef IS_BIGENDIAN
72+
return true;
73+
#else // IS_BIGENDIAN
74+
return false;
75+
#endif // IS_BIGENDIAN
76+
}
77+
8078
namespace error {
8179

8280
void Abort();
@@ -143,7 +141,6 @@ inline const char *BaseName(const char *path) {
143141
<< "(" << __LINE__ << ") [" << #condition \
144142
<< "] "
145143

146-
#define CHECK_STREQ(a, b) CHECK_EQ(std::string(a), std::string(b))
147144
#define CHECK_EQ(a, b) CHECK((a) == (b))
148145
#define CHECK_NE(a, b) CHECK((a) != (b))
149146
#define CHECK_GE(a, b) CHECK((a) >= (b))

src/init_test.cc

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ TEST(FlagsTest, ParseCommandLineFlagsTest) {
4646
"--bool_f=true", "--int64_f=200", "--uint64_f=300",
4747
"--double_f=400", "--string_f=foo", "other2",
4848
"other3"};
49-
int argc = arraysize(kFlags);
49+
int argc = std::size(kFlags);
5050
char **argv = const_cast<char **>(kFlags);
5151
ParseCommandLineFlags(kFlags[0], &argc, &argv);
5252

@@ -67,7 +67,7 @@ TEST(FlagsTest, ParseCommandLineFlagsTest2) {
6767
const char *kFlags[] = {"program", "--int32_f", "500",
6868
"-int64_f=600", "-uint64_f", "700",
6969
"--bool_f=FALSE"};
70-
int argc = arraysize(kFlags);
70+
int argc = std::size(kFlags);
7171
char **argv = const_cast<char **>(kFlags);
7272
ParseCommandLineFlags(kFlags[0], &argc, &argv);
7373

@@ -81,7 +81,7 @@ TEST(FlagsTest, ParseCommandLineFlagsTest2) {
8181
TEST(FlagsTest, ParseCommandLineFlagsTest3) {
8282
const char *kFlags[] = {"program", "--bool_f", "--int32_f", "800"};
8383

84-
int argc = arraysize(kFlags);
84+
int argc = std::size(kFlags);
8585
char **argv = const_cast<char **>(kFlags);
8686
ParseCommandLineFlags(kFlags[0], &argc, &argv);
8787
EXPECT_TRUE(absl::GetFlag(FLAGS_bool_f));
@@ -91,37 +91,37 @@ TEST(FlagsTest, ParseCommandLineFlagsTest3) {
9191

9292
TEST(FlagsTest, ParseCommandLineFlagsHelpTest) {
9393
const char *kFlags[] = {"program", "--help"};
94-
int argc = arraysize(kFlags);
94+
int argc = std::size(kFlags);
9595
char **argv = const_cast<char **>(kFlags);
9696
EXPECT_DEATH(ParseCommandLineFlags(kFlags[0], &argc, &argv), "");
9797
absl::SetFlag(&FLAGS_help, false);
9898
}
9999

100100
TEST(FlagsTest, ParseCommandLineFlagsVersionTest) {
101101
const char *kFlags[] = {"program", "--version"};
102-
int argc = arraysize(kFlags);
102+
int argc = std::size(kFlags);
103103
char **argv = const_cast<char **>(kFlags);
104104
EXPECT_DEATH(ParseCommandLineFlags(kFlags[0], &argc, &argv), "");
105105
absl::SetFlag(&FLAGS_version, false);
106106
}
107107

108108
TEST(FlagsTest, ParseCommandLineFlagsUnknownTest) {
109109
const char *kFlags[] = {"program", "--foo"};
110-
int argc = arraysize(kFlags);
110+
int argc = std::size(kFlags);
111111
char **argv = const_cast<char **>(kFlags);
112112
EXPECT_DEATH(ParseCommandLineFlags(kFlags[0], &argc, &argv), "");
113113
}
114114

115115
TEST(FlagsTest, ParseCommandLineFlagsInvalidBoolTest) {
116116
const char *kFlags[] = {"program", "--bool_f=X"};
117-
int argc = arraysize(kFlags);
117+
int argc = std::size(kFlags);
118118
char **argv = const_cast<char **>(kFlags);
119119
EXPECT_DEATH(ParseCommandLineFlags(kFlags[0], &argc, &argv), "");
120120
}
121121

122122
TEST(FlagsTest, ParseCommandLineFlagsEmptyStringArgs) {
123123
const char *kFlags[] = {"program", "--string_f="};
124-
int argc = arraysize(kFlags);
124+
int argc = std::size(kFlags);
125125
char **argv = const_cast<char **>(kFlags);
126126
ParseCommandLineFlags(kFlags[0], &argc, &argv);
127127
EXPECT_EQ(1, argc);
@@ -130,7 +130,7 @@ TEST(FlagsTest, ParseCommandLineFlagsEmptyStringArgs) {
130130

131131
TEST(FlagsTest, ParseCommandLineFlagsEmptyBoolArgs) {
132132
const char *kFlags[] = {"program", "--bool_f"};
133-
int argc = arraysize(kFlags);
133+
int argc = std::size(kFlags);
134134
char **argv = const_cast<char **>(kFlags);
135135
ParseCommandLineFlags(kFlags[0], &argc, &argv);
136136
EXPECT_EQ(1, argc);
@@ -139,7 +139,7 @@ TEST(FlagsTest, ParseCommandLineFlagsEmptyBoolArgs) {
139139

140140
TEST(FlagsTest, ParseCommandLineFlagsEmptyIntArgs) {
141141
const char *kFlags[] = {"program", "--int32_f"};
142-
int argc = arraysize(kFlags);
142+
int argc = std::size(kFlags);
143143
char **argv = const_cast<char **>(kFlags);
144144
EXPECT_DEATH(ParseCommandLineFlags(kFlags[0], &argc, &argv), );
145145
}

src/normalizer.cc

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,12 @@ Normalizer::~Normalizer() {}
4747

4848
void Normalizer::Init() {
4949
absl::string_view index = spec_->precompiled_charsmap();
50+
5051
if (!index.empty()) {
5152
absl::string_view trie_blob;
52-
#ifdef IS_BIG_ENDIAN
5353
status_ = DecodePrecompiledCharsMap(index, &trie_blob, &normalized_,
5454
&precompiled_charsmap_buffer_);
55-
#else
56-
status_ = DecodePrecompiledCharsMap(index, &trie_blob, &normalized_);
57-
#endif
55+
5856
if (!status_.ok()) return;
5957

6058
// Reads the body of double array.
@@ -260,10 +258,10 @@ std::string Normalizer::EncodePrecompiledCharsMap(
260258
blob.append(string_util::EncodePOD<uint32_t>(trie_blob.size()));
261259
blob.append(trie_blob.data(), trie_blob.size());
262260

263-
#ifdef IS_BIG_ENDIAN
264-
uint32_t *data = reinterpret_cast<uint32_t *>(blob.data());
265-
for (int i = 0; i < blob.size() / 4; ++i) data[i] = util::Swap32(data[i]);
266-
#endif
261+
if constexpr (is_bigendian()) {
262+
uint32_t *data = reinterpret_cast<uint32_t *>(blob.data());
263+
for (int i = 0; i < blob.size() / 4; ++i) data[i] = util::Swap32(data[i]);
264+
}
267265

268266
blob.append(normalized.data(), normalized.size());
269267

@@ -282,9 +280,9 @@ util::Status Normalizer::DecodePrecompiledCharsMap(
282280
return util::InternalError("Blob for normalization rule is broken.");
283281
}
284282

285-
#ifdef IS_BIG_ENDIAN
286-
trie_blob_size = util::Swap32(trie_blob_size);
287-
#endif
283+
if constexpr (is_bigendian()) {
284+
trie_blob_size = util::Swap32(trie_blob_size);
285+
}
288286

289287
if (trie_blob_size >= blob.size()) {
290288
return util::InternalError("Trie data size exceeds the input blob size.");
@@ -297,16 +295,17 @@ util::Status Normalizer::DecodePrecompiledCharsMap(
297295

298296
blob.remove_prefix(sizeof(trie_blob_size));
299297

300-
#ifdef IS_BIG_ENDIAN
301-
CHECK_OR_RETURN(buffer);
302-
buffer->assign(blob.data(), trie_blob_size);
303-
uint32_t *data =
304-
reinterpret_cast<uint32_t *>(const_cast<char *>(buffer->data()));
305-
for (int i = 0; i < buffer->size() / 4; ++i) data[i] = util::Swap32(data[i]);
306-
*trie_blob = absl::string_view(buffer->data(), trie_blob_size);
307-
#else
308-
*trie_blob = absl::string_view(blob.data(), trie_blob_size);
309-
#endif
298+
if constexpr (is_bigendian()) {
299+
CHECK_OR_RETURN(buffer);
300+
buffer->assign(blob.data(), trie_blob_size);
301+
uint32_t *data =
302+
reinterpret_cast<uint32_t *>(const_cast<char *>(buffer->data()));
303+
for (int i = 0; i < buffer->size() / 4; ++i)
304+
data[i] = util::Swap32(data[i]);
305+
*trie_blob = absl::string_view(buffer->data(), trie_blob_size);
306+
} else {
307+
*trie_blob = absl::string_view(blob.data(), trie_blob_size);
308+
}
310309

311310
blob.remove_prefix(trie_blob_size);
312311
*normalized = absl::string_view(blob.data(), blob.size());

src/normalizer.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ class Normalizer {
123123
static util::Status DecodePrecompiledCharsMap(absl::string_view blob,
124124
absl::string_view *trie_blob,
125125
absl::string_view *normalized,
126-
std::string *buffer = nullptr);
126+
std::string *buffer);
127127

128128
// Maximum size of the return value of Trie, which corresponds
129129
// to the maximum size of shared common prefix in the chars map.
@@ -146,10 +146,8 @@ class Normalizer {
146146
// "_hello" and "_world".
147147
const bool treat_whitespace_as_suffix_ = false;
148148

149-
#ifdef IS_BIG_ENDIAN
150149
// Stores the blob for TRIE encoded in big-endian.
151150
std::string precompiled_charsmap_buffer_;
152-
#endif
153151

154152
// Normalizer's status.
155153
util::Status status_;

0 commit comments

Comments
 (0)