/**************************************************************************
 *
 * _error.h - Definitions for error messages
 *
 * This is an internal header file used to implement the C++ Standard
 * Library. It should never be #included directly by a program.
 *
 * $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 1994-2006 Rogue Wave Software.
 * 
 **************************************************************************/

#ifndef _RWSTD_RW_ERROR_H_INCLUDED
#define _RWSTD_RW_ERROR_H_INCLUDED

#ifndef _RWSTD_NO_INCLUDES
   // prevent inclusion if compiling a .rc file with MSVC

#  ifndef _RWSTD_RW_DEFS_H_INCLUDED
#    include <rw/_defs.h>
#  endif   // _RWSTD_RW_DEFS_H_INCLUDED


_RWSTD_NAMESPACE (__rw) { 

// throws an exception identified by first argument, optional arguments
// (if any) used to format the exception object's what() string
_RWSTD_EXPORT void __rw_throw (int, ...);

// frees memory buffer used for what() message
_RWSTD_EXPORT void __rw_free_what_buf (char*);

// throws an exception identified by first argument with the second
// argument containing the exception object's what() string, which
// if non-0, is must be freed using __rw_free_what_buf()
// may be assigned to a user-defined handler (e.g., to prevent
// the library from throwing exceptions or to implement logging)
_RWSTD_EXPORT extern void (*__rw_throw_proc)(int, char*);

}   // namespace __rw

#endif

#ifndef _RWSTD_ERROR_CATALOG
   // name of catalog optionally followed by a colon and a set number
   // catalog looked up according to rules of catopen(3)
   // may be customized at lib build time (pathname okay)
#  define _RWSTD_ERROR_CATALOG "rwstderr:1"
#endif   // _RWSTD_ERROR_CATALOG

#ifndef _RWSTD_ERROR_ENVVAR
   // environment variable name - overrides _RWSTD_ERROR_CATALOG
   // may be customized at lib build time
#  define _RWSTD_ERROR_ENVVAR "RWSTDERR"
#endif   // _RWSTD_ERROR_ENVVAR

#ifndef _RWSTD_ERROR_FIRST
   // id of first message - 1, may be customized at lib build time
#  define _RWSTD_ERROR_FIRST 0
#endif   // _RWSTD_ERROR_FIRST


// these must be macros to accomodate MSVC's resource compiler, with values
// expected to be consecutive starting with _RWSTD_ERROR_FIRST + 1

// #  define _RWSTD_ERROR_EXCEPTION                   (_RWSTD_ERROR_FIRST +  1)
// #  define _RWSTD_ERROR_BAD_EXCEPTION               (_RWSTD_ERROR_FIRST +  2)
// #  define _RWSTD_ERROR_BAD_ALLOC                   (_RWSTD_ERROR_FIRST +  3)
#  define _RWSTD_ERROR_BAD_CAST                    (_RWSTD_ERROR_FIRST +  4)
#  define _RWSTD_ERROR_LOGIC_ERROR                 (_RWSTD_ERROR_FIRST +  5)
#  define _RWSTD_ERROR_DOMAIN_ERROR                (_RWSTD_ERROR_FIRST +  6)
#  define _RWSTD_ERROR_INVALID_ARGUMENT            (_RWSTD_ERROR_FIRST +  7)
#  define _RWSTD_ERROR_LENGTH_ERROR                (_RWSTD_ERROR_FIRST +  8)
#  define _RWSTD_ERROR_OUT_OF_RANGE                (_RWSTD_ERROR_FIRST +  9)
#  define _RWSTD_ERROR_RUNTIME_ERROR               (_RWSTD_ERROR_FIRST + 10)
#  define _RWSTD_ERROR_RANGE_ERROR                 (_RWSTD_ERROR_FIRST + 11)
#  define _RWSTD_ERROR_OVERFLOW_ERROR              (_RWSTD_ERROR_FIRST + 12)
#  define _RWSTD_ERROR_UNDERFLOW_ERROR             (_RWSTD_ERROR_FIRST + 13)

#  define _RWSTD_ERROR_FAILBIT_SET                 (_RWSTD_ERROR_FIRST + 14)
#  define _RWSTD_ERROR_BADBIT_SET                  (_RWSTD_ERROR_FIRST + 15)
#  define _RWSTD_ERROR_EOFBIT_SET                  (_RWSTD_ERROR_FIRST + 16)
#  define _RWSTD_ERROR_IOSTATE_BIT_SET             (_RWSTD_ERROR_FIRST + 17)

#  define _RWSTD_ERROR_FACET_NOT_FOUND             (_RWSTD_ERROR_FIRST + 18)
#  define _RWSTD_ERROR_LOCALE_BAD_NAME             (_RWSTD_ERROR_FIRST + 19)
#  define _RWSTD_ERROR_LOCALE_ERROR_NAME           (_RWSTD_ERROR_FIRST + 20)
#  define _RWSTD_ERROR_CODECVT                     (_RWSTD_ERROR_FIRST + 21)

#  define _RWSTD_ERROR_BAD_POINTER                 (_RWSTD_ERROR_FIRST + 22)
#  define _RWSTD_ERROR_TRANSFORM                   (_RWSTD_ERROR_FIRST + 23)
#  define _RWSTD_ERROR_LOCALE_BAD_CAT              (_RWSTD_ERROR_FIRST + 24)

#  define _RWSTD_ERROR_STRINGS                                  \
          "%s: %s: unspecified error",                          \
          "%s: %s: exception",                                  \
          "%s: %s: unexpected exception",                       \
          "%s: %s: bad_alloc: out of memory",                   \
          "%s: %s: bad cast",                                   \
          "%s: %s: logic error",                                \
          "%s: %s: domain error",                               \
          "%s: %s: invalid argument",                           \
          "%s: %s: length error: size %u out of range [0, %u)", \
          "%s: %s: argument value %u out of range [0, %u)",     \
          "%s: %s: runtime error",                              \
          "%s: %s: range error: invalid range [%d, %d)",        \
          "%s: %s: overflow error",                             \
          "%s: %s: underflow error",                            \
          /* the following take a single arg because */         \
          /* they are generated in a .cpp file       */         \
          "%s: stream object has set ios::failbit",             \
          "%s: stream object has set ios::badbit",              \
          "%s: stream object has set ios::eofbit",              \
          "%s: stream object has set %s",                       \
          "%s: %s: facet %u not found in locale (\"%s\")",      \
          "%s: %s: bad locale name: \"%s\"",                    \
          "%s: %s: failed to construct locale name",            \
          "%s: %s: conversion failed",                          \
          "%s: %s: invalid pointer %p",                         \
          "%s: %s: transformation failed",                      \
          "%s: %s: bad category value: %#x"

#define _RWSTD_ERROR_EXCEPTION     "exception"
#define _RWSTD_ERROR_BAD_EXCEPTION "unexpected exception"
#define _RWSTD_ERROR_BAD_ALLOC     "bad_alloc: out of memory"


#endif   // _RWSTD_RW_ERROR_H_INCLUDED
