// Copyright 2017 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef XFA_FGAS_CRT_CFGAS_DECIMAL_H_
#define XFA_FGAS_CRT_CFGAS_DECIMAL_H_

#include "core/fxcrt/widestring.h"

class CFGAS_Decimal {
 public:
  CFGAS_Decimal();
  explicit CFGAS_Decimal(uint32_t val);
  explicit CFGAS_Decimal(uint64_t val);
  explicit CFGAS_Decimal(int32_t val);
  CFGAS_Decimal(float val, uint8_t scale);
  explicit CFGAS_Decimal(WideStringView str);

  WideString ToWideString() const;
  float ToFloat() const;
  double ToDouble() const;

  CFGAS_Decimal operator*(const CFGAS_Decimal& val) const;
  CFGAS_Decimal operator/(const CFGAS_Decimal& val) const;

  bool IsNotZero() const { return m_uHi || m_uMid || m_uLo; }
  uint8_t GetScale() const { return m_uScale; }
  void SetScale(uint8_t newScale);
  void SetNegate();

 private:
  CFGAS_Decimal(uint32_t hi,
                uint32_t mid,
                uint32_t lo,
                bool neg,
                uint8_t scale);

  uint32_t m_uHi = 0;
  uint32_t m_uMid = 0;
  uint32_t m_uLo = 0;
  bool m_bNeg = false;
  uint8_t m_uScale = 0;
};

#endif  // XFA_FGAS_CRT_CFGAS_DECIMAL_H_
