price operator/(const asset &base, const asset "e) { try { FC_ASSERT(base.symbol_name() != quote.symbol_name()); return price{base, quote}; } FC_CAPTURE_AND_RETHROW((base)(quote)) }
asset operator*(const asset &a, const price &b) { if (a.symbol_name() == b.base.symbol_name()) { FC_ASSERT(b.base.amount.value > 0); uint128_t result = (uint128_t(a.amount.value) * b.quote.amount.value) / b.base.amount.value; FC_ASSERT(result.hi == 0); return asset(result.to_uint64(), b.quote.symbol); } else if (a.symbol_name() == b.quote.symbol_name()) { FC_ASSERT(b.quote.amount.value > 0); uint128_t result = (uint128_t(a.amount.value) * b.base.amount.value) / b.quote.amount.value; FC_ASSERT(result.hi == 0); return asset(result.to_uint64(), b.base.symbol); } FC_THROW_EXCEPTION(fc::assert_exception, "invalid asset * price", ("asset", a)("price", b)); }
asset operator * ( const asset& a, const price& b ) { if( a.symbol_name() == b.base.symbol_name() ) { FC_ASSERT( b.base.amount.value > 0 ); uint128_t result = (uint128_t(a.amount.value) * b.quote.amount.value)/b.base.amount.value; FC_ASSERT( result <= uint64_t(-1) ); return asset( result.to_uint64(), b.quote.symbol ); } else if( a.symbol_name() == b.quote.symbol_name() ) { FC_ASSERT( b.quote.amount.value > 0 ); uint128_t result = (uint128_t(a.amount.value) * b.base.amount.value)/b.quote.amount.value; //FC_ASSERT( result <= STEEMIT_MAX_SHARE_SUPPLY, "${result}", ("result",result)("max",STEEMIT_MAX_SHARE_SUPPLY)("asset",a)("price",b) ); FC_ASSERT( result <= uint64_t(-1) ); return asset( result.to_uint64(), b.base.symbol ); } FC_THROW_EXCEPTION( fc::assert_exception, "invalid asset * price", ("asset",a)("price",b) ); }