osrm-backend/include/util/fingerprint.hpp

41 lines
1.2 KiB
C++
Raw Normal View History

2015-01-27 11:44:46 -05:00
#ifndef FINGERPRINT_H
#define FINGERPRINT_H
#include <array>
2015-01-27 11:44:46 -05:00
#include <boost/uuid/uuid.hpp>
#include <cstdint>
#include <type_traits>
2015-01-27 11:44:46 -05:00
namespace osrm::util
2016-01-05 10:51:13 -05:00
{
2015-01-27 11:44:46 -05:00
// implements a singleton, i.e. there is one and only one conviguration object
struct FingerPrint
2015-01-27 11:44:46 -05:00
{
2015-06-18 12:34:25 -04:00
static FingerPrint GetValid();
bool IsValid() const;
bool IsDataCompatible(const FingerPrint &other) const;
int GetMajorVersion() const;
int GetMinorVersion() const;
int GetPatchVersion() const;
2015-01-27 11:44:46 -05:00
private:
std::uint8_t CalculateChecksum() const;
// Here using std::array so that == can be used to conveniently compare contents
std::array<std::uint8_t, 4> magic_number;
std::uint8_t major_version;
std::uint8_t minor_version;
std::uint8_t patch_version;
std::uint8_t checksum; // CRC8 of the previous bytes to ensure the fingerprint is not damaged
2015-01-27 11:44:46 -05:00
};
static_assert(sizeof(FingerPrint) == 8, "FingerPrint has unexpected size");
static_assert(std::is_trivial<FingerPrint>::value, "FingerPrint needs to be trivial.");
static_assert(std::is_standard_layout<FingerPrint>::value,
"FingerPrint needs have a standard layout.");
2022-12-20 12:00:11 -05:00
} // namespace osrm::util
2016-01-05 10:51:13 -05:00
2015-01-27 11:44:46 -05:00
#endif /* FingerPrint_H */