root/headers/private/debugger/value/value_formatters/IntegerValueFormatter.h
/*
 * Copyright 2015, Rene Gollent, rene@gollent.com.
 * Distributed under the terms of the MIT License.
 */
#ifndef INTEGER_VALUE_FORMATTER_H
#define INTEGER_VALUE_FORMATTER_H


#include "util/IntegerFormatter.h"
#include "ValueFormatter.h"


class Settings;
class Value;


class IntegerValueFormatter : public ValueFormatter {
public:
        class Config;

public:
                                                                IntegerValueFormatter(Config* config);
        virtual                                         ~IntegerValueFormatter();

                        Config*                         GetConfig() const
                                                                        { return fConfig; }

        virtual Settings*                       GetSettings() const;

        virtual status_t                        FormatValue(Value* value, BString& _output);

        virtual bool                            SupportsValidation() const;

        virtual bool                            ValidateFormattedValue(
                                                                        const BString& input,
                                                                        type_code type) const;

        virtual status_t                        GetValueFromFormattedInput(
                                                                        const BString& input, type_code type,
                                                                        Value*& _output) const;
private:

                        status_t                        _PerformValidation(const BString& input,
                                                                        type_code type,
                                                                        ::Value*& _output,
                                                                        bool wantsValue) const;
                        status_t                        _ValidateSigned(const BString& input,
                                                                        type_code type,
                                                                        ::Value*& _output,
                                                                        bool wantsValue = false) const;
                        status_t                        _ValidateUnsigned(const BString& input,
                                                                        type_code type,
                                                                        ::Value*& _output,
                                                                        integer_format format,
                                                                        bool wantsValue = false) const;

                        Config*                         fConfig;
};


class IntegerValueFormatter::Config : public BReferenceable {
public:
        virtual                                         ~Config();

        virtual Settings*                       GetSettings() const = 0;
        virtual integer_format          IntegerFormat() const = 0;
};


#endif  // INTEGER_VALUE_FORMATTER_H