Commit 1585ffa4 authored by Andrew Gallagher's avatar Andrew Gallagher Committed by Jordan DeLong

fbstring: avoid including Likely.h

Summary:
Including Likely.h causes issues when import fbstring into
libstdc++, so provide internal definitions for these macros that
we can undef afterwards.

Test Plan: built folly

Reviewed By: andrei.alexandrescu@fb.com

FB internal diff: D675366
parent b5e51ce6
/* /*
* Copyright 2012 Facebook, Inc. * Copyright 2013 Facebook, Inc.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -87,12 +87,16 @@ ...@@ -87,12 +87,16 @@
#include <cassert> #include <cassert>
#include "folly/Traits.h" #include "folly/Traits.h"
#include "folly/Likely.h"
#include "folly/Malloc.h" #include "folly/Malloc.h"
#include "folly/Hash.h" #include "folly/Hash.h"
#endif #endif
// We defined these here rather than including Likely.h to avoid
// redefinition errors when fbstring is imported into libstdc++.
#define FBSTRING_LIKELY(x) (__builtin_expect((x), 1))
#define FBSTRING_UNLIKELY(x) (__builtin_expect((x), 0))
#include <atomic> #include <atomic>
#include <limits> #include <limits>
#include <type_traits> #include <type_traits>
...@@ -1259,7 +1263,7 @@ public: ...@@ -1259,7 +1263,7 @@ public:
Invariant checker(*this); Invariant checker(*this);
(void) checker; (void) checker;
#endif #endif
if (UNLIKELY(!n)) { if (FBSTRING_UNLIKELY(!n)) {
// Unlikely but must be done // Unlikely but must be done
return *this; return *this;
} }
...@@ -1272,7 +1276,7 @@ public: ...@@ -1272,7 +1276,7 @@ public:
// over pointers. See discussion at http://goo.gl/Cy2ya for more // over pointers. See discussion at http://goo.gl/Cy2ya for more
// info. // info.
std::less_equal<const value_type*> le; std::less_equal<const value_type*> le;
if (UNLIKELY(le(oldData, s) && !le(oldData + oldSize, s))) { if (FBSTRING_UNLIKELY(le(oldData, s) && !le(oldData + oldSize, s))) {
assert(le(s + n, oldData + oldSize)); assert(le(s + n, oldData + oldSize));
const size_type offset = s - oldData; const size_type offset = s - oldData;
store_.reserve(oldSize + n); store_.reserve(oldSize + n);
...@@ -2323,4 +2327,7 @@ struct hash< ::folly::fbstring> { ...@@ -2323,4 +2327,7 @@ struct hash< ::folly::fbstring> {
#endif // _LIBSTDCXX_FBSTRING #endif // _LIBSTDCXX_FBSTRING
#undef FBSTRING_LIKELY
#undef FBSTRING_UNLIKELY
#endif // FOLLY_BASE_FBSTRING_H_ #endif // FOLLY_BASE_FBSTRING_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment