/************************************************************************
 *
 * fmt_defs.h - declarations and definitions of types and functions
 *              used to implement the snprintfa helper functions
 *
 * $Id$
 *
 ************************************************************************
 *
 * Licensed to the Apache Software  Foundation (ASF) under one or more
 * contributor  license agreements.  See  the NOTICE  file distributed
 * with  this  work  for  additional information  regarding  copyright
 * ownership.   The ASF  licenses this  file to  you under  the Apache
 * License, Version  2.0 (the  "License"); you may  not use  this file
 * except in  compliance with the License.   You may obtain  a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the  License is distributed on an  "AS IS" BASIS,
 * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
 * implied.   See  the License  for  the  specific language  governing
 * permissions and limitations under the License.
 *
 * Copyright 2005-2006 Rogue Wave Software.
 * 
 **************************************************************************/

#ifndef RW_FMT_DEFS_H_INCLUDED
#define RW_FMT_DEFS_H_INCLUDED

#include <rw_testdefs.h>

#include <stddef.h>     // for ptrdiff_t, size_t

/********************************************************************/

// convenience typedefs
typedef unsigned char  UChar;
typedef unsigned short UShrt;
typedef unsigned int   UInt;
typedef unsigned long  ULong;

#ifdef _RWSTD_LONG_LONG

typedef unsigned _RWSTD_LONG_LONG ULLong;

#endif   // _RWSTD_LONG_LONG

typedef void (*funptr_t)();

struct DummyStruct { };
typedef void (DummyStruct::*memptr_t)() const;

/********************************************************************/

struct Buffer {
    char   **pbuf;       // pointer to the output buffer
    size_t  *pbufsize;   // pointer to the size of the buffer
    size_t   maxsize;    // maximum not-to-exceed size
    size_t   endoff;     // offset of the last character
};

/********************************************************************/

struct FmtSpec
{
    // optional flags
    unsigned fl_minus  : 1;
    unsigned fl_plus   : 1;
    unsigned fl_pound  : 1;
    unsigned fl_space  : 1;
    unsigned fl_zero   : 1;

    // optional length modifier
    enum Modifier {
        mod_none = 0,
        mod_h,       // short modifier
        mod_hh,      // char modifier
        mod_l,       // long modifier
        mod_ll,      // long long modifier
        mod_j,       // intmax_t modifier
        mod_z,       // size_t modifier
        mod_t,       // ptrdiff_t modifier
        mod_L,       // long double modifier
        mod_ext_A,   // extension: arrays
        mod_ext_I    // extension: int as ios::iostate
    };

    Modifier mod : 5;

    unsigned cond       : 1;   // have an if/else clause
    unsigned cond_true  : 1;   // if/else clause is active (true)
    unsigned cond_begin : 1;   // beginning of an if/else clause
    unsigned cond_end   : 1;   // end of an if/else clause

    // note that the signedness of a bitfield is implementation-defined
    // unless explicitly declared signed or unsigned

    // extension: 8, 16, 32, and 64 bit integer width modifier
    signed int iwidth : 4;

    // extension: optional numerical base 2 - 36
    signed int base   : 7;

    // extension: optional parameter number
    long paramno;

    // optional field width and precision
    int width;
    int prec;

    // extension: string argument
    char *strarg;

    // required conversion specifier
    int cvtspec;

    // extension: fill character
    int fill;

#ifndef _RWSTD_NO_LONG_DOUBLE
    typedef long double ldbl_t;
#else
    typedef double      ldbl_t;   // bogus (for convenience)
#endif   // _RWSTD_NO_LONG_DOUBLE

#ifdef _RWSTD_LONG_LONG
    typedef _RWSTD_LONG_LONG llong_t;
#else
    typedef long             llong_t;   // bogus (for convenience)
#endif   // _RWSTD_LONG_LONG

#ifdef _RWSTD_INT64_T
    typedef _RWSTD_INT64_T i64_t;
#else
    typedef int            i64_t;   // likely bogus (for convenience)
#endif   // _RWSTD_INT64_T

#ifdef _RWSTD_INT32_T
    typedef _RWSTD_INT32_T i32_t;
#else
    typedef int            i32_t;
#endif   // _RWSTD_INT64_T

#ifdef _RWSTD_WINT_T
    typedef _RWSTD_WINT_T wint_t;
#else
    typedef int           wint_t;
#endif   // _RWSTD_WINT_T

    typedef ::size_t   size_t;
    typedef ptrdiff_t  diff_t;
    typedef ::funptr_t funptr_t;
    typedef ::memptr_t memptr_t;

    typedef int        int_t;
    typedef long       long_t;
    typedef void*      ptr_t;
    typedef double     dbl_t;

    union {
        ldbl_t    ldbl_;
        llong_t   llong_;
        i64_t     i64_;
        ptr_t     ptr_;
        long_t    long_;
        i32_t     i32_;
        int_t     int_;
        diff_t    diff_;
        size_t    size_;
        wint_t    wint_;

        dbl_t     dbl_;
        memptr_t  memptr_;
        funptr_t  funptr_;
    } param;
};

/********************************************************************/

// format a character string
extern int
_rw_fmtstr (const FmtSpec&, Buffer&, const char*, size_t);

// format errno value/name
extern int
_rw_fmterrno (const FmtSpec&, Buffer&, int);

// format Windows GetLastError(), or errno value/name
extern int
_rw_fmtlasterror (const FmtSpec&, Buffer&, int);

// format the name/value of an LC_XXX constant/environment variable
extern int
_rw_fmtlc (const FmtSpec&, Buffer&, int);

// format ctype_base::mask
extern int
_rw_fmtmask (const FmtSpec&, Buffer&, int);

// format a character mask (alpha|alnum|...|xdigit)
extern int
_rw_fmtcharmask (const FmtSpec&, Buffer&, int);

// format ios_base::iostate
extern int
_rw_fmtiostate (const FmtSpec&, Buffer&, int);

// format ios_base::fmtflags
extern int
_rw_fmtflags (const FmtSpec&, Buffer&, int);

// format ios_base::openmode
extern int
_rw_fmtopenmode (const FmtSpec&, Buffer&, int);

// format ios_base::seekdir
extern int
_rw_fmtseekdir (const FmtSpec&, Buffer&, int);

// format ios_base::event
extern int
_rw_fmtevent (const FmtSpec&, Buffer&, int);

extern int
_rw_fmtmonpat (const FmtSpec&, Buffer&, const char [4]);

// format a signal value/name
extern int
_rw_fmtsignal (const FmtSpec&, Buffer&, int);

// format a bitset of arbitrary size
extern int
_rw_fmtbits (const FmtSpec&, Buffer&, const void*, size_t);

#endif   // RW_FMT_DEFS_H_INCLUDED
