Flutter Engine
 
Loading...
Searching...
No Matches
impeller::Rational Class Reference

#include <rational.h>

Public Member Functions

constexpr Rational (int32_t num)
 
constexpr Rational (int32_t num, uint32_t den)
 
int32_t GetNumerator () const
 
uint32_t GetDenominator () const
 
bool operator== (const Rational &that) const
 
bool operator< (const Rational &that) const
 
uint64_t GetHash () const
 
 operator Scalar () const
 
Rational Invert () const
 

Detailed Description

Definition at line 13 of file rational.h.

Constructor & Destructor Documentation

◆ Rational() [1/2]

constexpr impeller::Rational::Rational ( int32_t  num)
inlineexplicitconstexpr

Definition at line 15 of file rational.h.

15: num_(num), den_(1) {}

◆ Rational() [2/2]

constexpr impeller::Rational::Rational ( int32_t  num,
uint32_t  den 
)
inlineconstexpr

Definition at line 17 of file rational.h.

17: num_(num), den_(den) {}

Member Function Documentation

◆ GetDenominator()

uint32_t impeller::Rational::GetDenominator ( ) const
inline

Definition at line 21 of file rational.h.

21{ return den_; }

Referenced by impeller::TextFrame::RoundScaledFontSize().

◆ GetHash()

uint64_t impeller::Rational::GetHash ( ) const

Definition at line 38 of file rational.cc.

38 {
39 if (num_ == 0) {
40 return 0;
41 }
42 uint64_t gcd = std::gcd(num_, den_);
43 return ((num_ / gcd) << 32) | (den_ / gcd);
44}

◆ GetNumerator()

int32_t impeller::Rational::GetNumerator ( ) const
inline

Definition at line 19 of file rational.h.

19{ return num_; }

Referenced by impeller::TextFrame::RoundScaledFontSize().

◆ Invert()

Rational impeller::Rational::Invert ( ) const

Definition at line 46 of file rational.cc.

46 {
47 if (num_ >= 0) {
48 return Rational(den_, num_);
49 } else {
50 return Rational(-1 * static_cast<int32_t>(den_), std::abs(num_));
51 }
52}
constexpr Rational(int32_t num)
Definition rational.h:15

Referenced by impeller::TextContents::ComputeVertexData().

◆ operator Scalar()

impeller::Rational::operator Scalar ( ) const
inlineexplicit

Definition at line 29 of file rational.h.

29{ return static_cast<float>(num_) / den_; }

◆ operator<()

bool impeller::Rational::operator< ( const Rational that) const

Definition at line 28 of file rational.cc.

28 {
29 if (den_ == that.den_) {
30 return num_ < that.num_;
31 } else if ((num_ >= 0) != (that.num_ >= 0)) {
32 return num_ < that.num_;
33 } else {
34 return AbsToUnsigned(num_) * that.den_ < AbsToUnsigned(that.num_) * den_;
35 }
36}

◆ operator==()

bool impeller::Rational::operator== ( const Rational that) const

Definition at line 18 of file rational.cc.

18 {
19 if (den_ == that.den_) {
20 return num_ == that.num_;
21 } else if ((num_ >= 0) != (that.num_ >= 0)) {
22 return false;
23 } else {
24 return AbsToUnsigned(num_) * that.den_ == AbsToUnsigned(that.num_) * den_;
25 }
26}

The documentation for this class was generated from the following files: