// Copyright 2017 PDFium Authors. All rights reserved.
// 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_
