diff --git a/mfbt/decimal/Decimal.h b/mfbt/decimal/Decimal.h --- a/mfbt/decimal/Decimal.h +++ b/mfbt/decimal/Decimal.h @@ -26,16 +26,18 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef Decimal_h #define Decimal_h +#include "mozilla/Types.h" + #include #include #include namespace WebCore { namespace DecimalPrivate { class SpecialValueHandler; @@ -88,92 +90,92 @@ public: FormatClass formatClass() const { return m_formatClass; } uint64_t m_coefficient; int16_t m_exponent; FormatClass m_formatClass; Sign m_sign; }; - Decimal(int32_t = 0); - Decimal(Sign, int exponent, uint64_t coefficient); - Decimal(const Decimal&); + MFBT_API Decimal(int32_t = 0); + MFBT_API Decimal(Sign, int exponent, uint64_t coefficient); + MFBT_API Decimal(const Decimal&); - Decimal& operator=(const Decimal&); - Decimal& operator+=(const Decimal&); - Decimal& operator-=(const Decimal&); - Decimal& operator*=(const Decimal&); - Decimal& operator/=(const Decimal&); + MFBT_API Decimal& operator=(const Decimal&); + MFBT_API Decimal& operator+=(const Decimal&); + MFBT_API Decimal& operator-=(const Decimal&); + MFBT_API Decimal& operator*=(const Decimal&); + MFBT_API Decimal& operator/=(const Decimal&); - Decimal operator-() const; + MFBT_API Decimal operator-() const; - bool operator==(const Decimal&) const; - bool operator!=(const Decimal&) const; - bool operator<(const Decimal&) const; - bool operator<=(const Decimal&) const; - bool operator>(const Decimal&) const; - bool operator>=(const Decimal&) const; + MFBT_API bool operator==(const Decimal&) const; + MFBT_API bool operator!=(const Decimal&) const; + MFBT_API bool operator<(const Decimal&) const; + MFBT_API bool operator<=(const Decimal&) const; + MFBT_API bool operator>(const Decimal&) const; + MFBT_API bool operator>=(const Decimal&) const; - Decimal operator+(const Decimal&) const; - Decimal operator-(const Decimal&) const; - Decimal operator*(const Decimal&) const; - Decimal operator/(const Decimal&) const; + MFBT_API Decimal operator+(const Decimal&) const; + MFBT_API Decimal operator-(const Decimal&) const; + MFBT_API Decimal operator*(const Decimal&) const; + MFBT_API Decimal operator/(const Decimal&) const; int exponent() const { ASSERT(isFinite()); return m_data.exponent(); } bool isFinite() const { return m_data.isFinite(); } bool isInfinity() const { return m_data.isInfinity(); } bool isNaN() const { return m_data.isNaN(); } bool isNegative() const { return sign() == Negative; } bool isPositive() const { return sign() == Positive; } bool isSpecial() const { return m_data.isSpecial(); } bool isZero() const { return m_data.isZero(); } - Decimal abs() const; - Decimal ceiling() const; - Decimal floor() const; - Decimal remainder(const Decimal&) const; - Decimal round() const; + MFBT_API Decimal abs() const; + MFBT_API Decimal ceiling() const; + MFBT_API Decimal floor() const; + MFBT_API Decimal remainder(const Decimal&) const; + MFBT_API Decimal round() const; - double toDouble() const; + MFBT_API double toDouble() const; // Note: toString method supports infinity and nan but fromString not. - String toString() const; + MFBT_API String toString() const; - static Decimal fromDouble(double); + static MFBT_API Decimal fromDouble(double); // fromString supports following syntax EBNF: // number ::= sign? digit+ ('.' digit*) (exponent-marker sign? digit+)? // | sign? '.' digit+ (exponent-marker sign? digit+)? // sign ::= '+' | '-' // exponent-marker ::= 'e' | 'E' // digit ::= '0' | '1' | ... | '9' // Note: fromString doesn't support "infinity" and "nan". - static Decimal fromString(const String&); - static Decimal infinity(Sign); - static Decimal nan(); - static Decimal zero(Sign); + static MFBT_API Decimal fromString(const String&); + static MFBT_API Decimal infinity(Sign); + static MFBT_API Decimal nan(); + static MFBT_API Decimal zero(Sign); // You should not use below methods. We expose them for unit testing. - explicit Decimal(const EncodedData&); + MFBT_API explicit Decimal(const EncodedData&); const EncodedData& value() const { return m_data; } private: struct AlignedOperands { uint64_t lhsCoefficient; uint64_t rhsCoefficient; int exponent; }; - Decimal(double); - Decimal compareTo(const Decimal&) const; + MFBT_API Decimal(double); + MFBT_API Decimal compareTo(const Decimal&) const; - static AlignedOperands alignOperands(const Decimal& lhs, const Decimal& rhs); + static MFBT_API AlignedOperands alignOperands(const Decimal& lhs, const Decimal& rhs); static inline Sign invertSign(Sign sign) { return sign == Negative ? Positive : Negative; } Sign sign() const { return m_data.sign(); } EncodedData m_data; }; } // namespace WebCore