Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/coding
diff options
context:
space:
mode:
authorVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2018-09-05 11:30:40 +0300
committermpimenov <mpimenov@users.noreply.github.com>2018-09-14 16:42:42 +0300
commite78e3f6fdc1ca356168422e8babf317d668f9ef2 (patch)
treea9d83e0cd05c15546dde3ca814074bfa5757663a /coding
parentea3407d1ec6a2800353896fac481023dbc3f4854 (diff)
Review fixes.
Diffstat (limited to 'coding')
-rw-r--r--coding/endianness.hpp19
-rw-r--r--coding/reader.hpp4
-rw-r--r--coding/write_to_sink.hpp2
3 files changed, 14 insertions, 11 deletions
diff --git a/coding/endianness.hpp b/coding/endianness.hpp
index 2f0329d594..39b4edc3b2 100644
--- a/coding/endianness.hpp
+++ b/coding/endianness.hpp
@@ -8,11 +8,14 @@
// #define ENDIAN_IS_BIG
-// @TODO(bykoianko) This method returns false since 05.12.2010. That means only little endian
-// architecture is supported. Now checks are added to generator and to app that only
-// little endian architecture is supported. All the usage of IsBigEndian(), ReverseByteOrder()
-// and SwapIfBigEndian() should be removed.
-inline bool IsBigEndian()
+// @TODO(bykoianko) This method returns false since 05.12.2010. That means only little-endian
+// architectures are supported. When it's necessary to support a big-endian system:
+// * method IsBigEndianMacroBased() should be implemented based on IsLittleEndian() function
+// * method SwapIfBigEndianMacroBased() should be implemented based on IsLittleEndian() function
+// * all serialization and deserialization of rs_bit_vector and the other rank-select structures
+// should be implemented taking endianness into account
+
+inline bool IsBigEndianMacroBased()
{
#ifdef ENDIAN_IS_BIG
return true;
@@ -33,7 +36,7 @@ template <typename T> T ReverseByteOrder(T t)
return res;
}
-template <typename T> inline T SwapIfBigEndian(T t)
+template <typename T> inline T SwapIfBigEndianMacroBased(T t)
{
#ifdef ENDIAN_IS_BIG
return ReverseByteOrder(t);
@@ -45,6 +48,6 @@ template <typename T> inline T SwapIfBigEndian(T t)
inline bool IsLittleEndian()
{
uint16_t const word = 0x0001;
- char const * const b = reinterpret_cast<char const * const>(&word);
- return b[0] == 0x1;
+ uint8_t const * const b = reinterpret_cast<uint8_t const * const>(&word);
+ return b[0] != 0x0;
}
diff --git a/coding/reader.hpp b/coding/reader.hpp
index 3fa06ad83f..fb3546a717 100644
--- a/coding/reader.hpp
+++ b/coding/reader.hpp
@@ -264,7 +264,7 @@ inline TPrimitive ReadPrimitiveFromPos(TReader const & reader, uint64_t pos)
#endif
TPrimitive primitive;
ReadFromPos(reader, pos, &primitive, sizeof(primitive));
- return SwapIfBigEndian(primitive);
+ return SwapIfBigEndianMacroBased(primitive);
}
template <typename TPrimitive, class TSource>
@@ -275,7 +275,7 @@ TPrimitive ReadPrimitiveFromSource(TSource & source)
#endif
TPrimitive primitive;
source.Read(&primitive, sizeof(primitive));
- return SwapIfBigEndian(primitive);
+ return SwapIfBigEndianMacroBased(primitive);
}
template <typename TPrimitive, typename TSource>
diff --git a/coding/write_to_sink.hpp b/coding/write_to_sink.hpp
index f5921e4290..3a0abefc46 100644
--- a/coding/write_to_sink.hpp
+++ b/coding/write_to_sink.hpp
@@ -9,7 +9,7 @@ template <class Sink, typename T>
std::enable_if_t<std::is_integral<T>::value || std::is_enum<T>::value, void> WriteToSink(
Sink & sink, T const & v)
{
- T const t = SwapIfBigEndian(v);
+ T const t = SwapIfBigEndianMacroBased(v);
sink.Write(&t, sizeof(T));
}