Skip to content
This repository has been archived by the owner on Aug 2, 2022. It is now read-only.

Commit

Permalink
Merge pull request #347 from EOSIO/larryk85-patch-1
Browse files Browse the repository at this point in the history
Fixes to print for lvalue references
  • Loading branch information
larryk85 committed Jan 14, 2019
2 parents c51c6d4 + 6483c40 commit 17f9d02
Showing 1 changed file with 19 additions and 48 deletions.
67 changes: 19 additions & 48 deletions libraries/eosiolib/print.hpp
Expand Up @@ -47,53 +47,35 @@ namespace eosio {
}

/**
* Prints string
*
* @param c - a char
*/
inline void print( char c ) {
prints_l( &c, 1 );
}

/**
* Prints 16-64 bit signed integer as a 64 bit signed integer
* Prints 8-128 bit signed integer
*
* @param num to be printed
*/
template <typename T, std::enable_if_t<std::is_integral<T>::value &&
std::is_signed<T>::value &&
!std::is_same<T, char>::value, int> = 0>
template <typename T, std::enable_if_t<std::is_integral<std::decay_t<T>>::value &&
std::is_signed<std::decay_t<T>>::value, int> = 0>
inline void print( T num ) {
printi(num);
if constexpr(std::is_same<T, int128_t>::value)
printi128(&num);
else if constexpr(std::is_same<T, char>::value)
prints_l( &num, 1 );
else
printi(num);
}

/**
* Prints 8-64 bit signed integer as a 64 bit signed integer
* Prints 8-128 bit unsigned integer
*
* @param num to be printed
*/
template <typename T, std::enable_if_t<std::is_integral<T>::value &&
std::is_unsigned<T>::value, int> = 0>
template <typename T, std::enable_if_t<std::is_integral<std::decay_t<T>>::value &&
!std::is_signed<std::decay_t<T>>::value, int> = 0>
inline void print( T num ) {
printui(num);
}

/**
* Prints 128 bit signed integer
*
* @param num to be printed
*/
inline void print( int128_t num ) {
printi128(&num);
}

/**
* Prints 128 bit unsigned integer
*
* @param num to be printed
*/
inline void print( uint128_t num ) {
printui128(&num);
if constexpr(std::is_same<T, uint128_t>::value)
printui128(&num);
else if constexpr(std::is_same<T, bool>::value)
prints(num?"true":"false");
else
printui(num);
}

/**
Expand All @@ -117,7 +99,6 @@ namespace eosio {
*/
inline void print( long double num ) { printqf( &num ); }


/**
* Prints fixed_bytes as a hexidecimal string
*
Expand Down Expand Up @@ -162,23 +143,13 @@ namespace eosio {
prints_l( buffer, (end-buffer) );
}

/**
* Prints bool
*
* @param val to be printed
*/
inline void print( bool val ) {
prints(val?"true":"false");
}


/**
* Prints class object
*
* @param t to be printed
* @pre T must implements print() function
*/
template<typename T, std::enable_if_t<!std::is_integral<T>::value, int> = 0>
template<typename T, std::enable_if_t<!std::is_integral<std::decay_t<T>>::value, int> = 0>
inline void print( T&& t ) {
if constexpr (std::is_same<std::decay_t<T>, std::string>::value)
prints_l( t.c_str(), t.size() );
Expand Down

0 comments on commit 17f9d02

Please sign in to comment.