/*
 * Copyright (C) 2020-2021 Aloysius Indrayanto
 *
 * This file is part of the eCxx library, see LICENSE file for the license details.
 */


#ifndef ECXX_CTL_NUMPUNCT_H
#define ECXX_CTL_NUMPUNCT_H


#include <eCxx/CTL/UninstantiableUncopyable.h>


namespace eCxx {


//
// Numeric punctuation preferences
//
class NumPunct : public Uninstantiable {
    private:
        NumPunct();

    public:
        static inline uint8_t grouping() noexcept
        { return _grouping; }

        static inline char thousandsSeparator() noexcept
        { return _thousandsSeparator; }

        static inline char decimalPoint() noexcept
        { return _decimalPoint; }

        static inline const char* trueName() noexcept
        { return _trueName; }

        static inline const char* falseName() noexcept
        { return _falseName; }

        static inline void setGrouping(uint8_t grouping) noexcept
        { _grouping = grouping; }

        static inline void setThousandsSeparator(char thousandsSeparator) noexcept
        { _thousandsSeparator = thousandsSeparator; }

        static inline void setDecimalPoint(char decimalPoint) noexcept
        { _decimalPoint = decimalPoint; }

        static inline void setTrueName(const char* trueName) noexcept
        { _trueName = trueName; }

        static inline void setFalseName(const char* falseName) noexcept
        { _falseName = falseName; }

    private:
        static uint8_t     _grouping;
        static char        _thousandsSeparator;
        static char        _decimalPoint;

        static const char* _trueName;
        static const char* _falseName;
};


} // namespace eCxx


#endif
