61 if( str.size() > 7 ) {
62 eosio::check(
false,
"string is too long to be a valid symbol_code" );
64 for(
auto itr = str.rbegin(); itr != str.rend(); ++itr ) {
65 if( *itr < 'A' || *itr >
'Z') {
66 eosio::check(
false,
"only uppercase letters allowed in symbol_code string" );
79 for (
int i=0; i < 7; i++ ) {
80 char c = (char)(sym & 0xFF);
81 if ( !(
'A' <= c && c <=
'Z') )
return false;
83 if ( !(sym & 0xFF) ) {
86 if ( (sym & 0xFF) )
return false;
102 while (sym & 0xFF &&
len <= 7) {
121 constexpr explicit operator bool()
const {
return value != 0; }
139 if( dry_run || (begin + 7 < begin) || (begin + 7 > end) ) {
140 char* actual_end = begin +
length();
141 if( dry_run || (actual_end < begin) || (actual_end > end) )
return actual_end;
145 for(
auto i = 0; i < 7; ++i, v >>= 8 ) {
146 if( v == 0 )
return begin;
148 *begin =
static_cast<char>(v & mask);
161 return {buffer, end};
172 printl( buffer, (end-buffer) );
181 return a.value == b.value;
190 return a.value != b.value;
199 return a.value < b.value;
214 template<
typename DataStream>
217 ds.write( (
const char*)&raw,
sizeof(raw));
229 template<
typename DataStream>
232 ds.read((
char*)&raw,
sizeof(raw));
284 constexpr uint8_t
precision()
const {
return static_cast<uint8_t
>( value & 0xFFull ); }
296 constexpr explicit operator bool()
const {
return value != 0; }
301 void print(
bool show_precision =
true )
const {
302 if( show_precision ){
308 printl( buffer, (end-buffer) );
317 return a.value == b.value;
326 return a.value != b.value;
335 return a.value < b.value;
351 template<
typename DataStream>
354 ds.write( (
const char*)&raw,
sizeof(raw));
367 template<
typename DataStream>
370 ds.read((
char*)&raw,
sizeof(raw));
416 void print(
bool show_precision =
true )
const {
417 sym.
print( show_precision );
427 return std::tie( a.sym, a.contract ) == std::tie( b.sym, b.contract );
436 return std::tie( a.sym, a.contract ) != std::tie( b.sym, b.contract );
445 return std::tie( a.sym, a.contract ) < std::tie( b.sym, b.contract );