Scorum
version.cpp
Go to the documentation of this file.
2 
3 #include <fc/exception/exception.hpp>
4 #include <fc/variant.hpp>
5 
6 #include <sstream>
7 
8 namespace scorum {
9 namespace protocol {
10 
11 /* Quick conversion utilities from http://joelverhagen.com/blog/2010/11/convert-an-int-to-a-string-and-vice-versa-in-c/
12  */
13 inline int string_to_int(fc::string input)
14 {
15  std::stringstream s(input);
16  int i;
17  s >> i;
18  return i;
19 }
20 
21 inline fc::string int_to_string(int input)
22 {
23  std::stringstream s;
24  s << input;
25  return s.str();
26 }
27 
28 version::version(uint8_t m, uint8_t h, uint16_t r)
29 {
30  v_num = (0 | m) << 8;
31  v_num = (v_num | h) << 16;
32  v_num = v_num | r;
33 }
34 
35 version::operator fc::string() const
36 {
37  std::stringstream s;
38  s << ((v_num >> 24) & 0x000000FF) << '.' << ((v_num >> 16) & 0x000000FF) << '.' << ((v_num & 0x0000FFFF));
39 
40  return s.str();
41 }
42 }
43 } // scorum::protocol
44 
45 namespace fc {
46 void to_variant(const scorum::protocol::version& v, variant& var)
47 {
48  var = fc::string(v);
49 }
50 
51 void from_variant(const variant& var, scorum::protocol::version& v)
52 {
53  uint32_t major = 0, hardfork = 0, revision = 0;
54  char dot_a = 0, dot_b = 0;
55 
56  std::stringstream s(var.as_string());
57  s >> major >> dot_a >> hardfork >> dot_b >> revision;
58 
59  // We'll accept either m.h.v or m_h_v as canonical version strings
60  FC_ASSERT((dot_a == '.' || dot_a == '_') && dot_a == dot_b,
61  "Variant does not contain proper dotted decimal format");
62  FC_ASSERT(major <= 0xFF, "Major version is out of range");
63  FC_ASSERT(hardfork <= 0xFF, "Hardfork version is out of range");
64  FC_ASSERT(revision <= 0xFFFF, "Revision version is out of range");
65  FC_ASSERT(s.eof(), "Extra information at end of version string");
66 
67  v.v_num = 0 | (major << 24) | (hardfork << 16) | revision;
68 }
69 
70 void to_variant(const scorum::protocol::hardfork_version& hv, variant& var)
71 {
72  to_variant((const scorum::protocol::version&)hv, var);
73 }
74 
75 void from_variant(const variant& var, scorum::protocol::hardfork_version& hv)
76 {
78  from_variant(var, ver);
79  hv.v_num = ver.v_num & 0xffff0000;
80 }
81 }
Definition: game.cpp:4
void to_variant(const game_type &game, fc::variant &var)
Definition: game.cpp:8
void from_variant(const fc::variant &var, game_type &game)
Definition: game.cpp:12
fc::string int_to_string(int input)
Definition: version.cpp:21
int string_to_int(fc::string input)
Definition: version.cpp:13
Definition: asset.cpp:15