/***********************************************************************
 *
 * rwsterr.rc - Apache C++ Standard Library Error Messages
 *
 * $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-2007 Rogue Wave Software, Inc.
 * 
 ***********************************************************************/

#define _RWSTD_NO_INCLUDES
#include <rw/_error.h>

STRINGTABLE
BEGIN
_RWSTD_ERROR_BAD_CAST         "%s: %s: bad cast"
_RWSTD_ERROR_LOGIC_ERROR      "%s: %s: logic error"
_RWSTD_ERROR_DOMAIN_ERROR     "%s: %s: out of memory"
_RWSTD_ERROR_INVALID_ARGUMENT "%s: %s: bad cast"
_RWSTD_ERROR_LENGTH_ERROR     "%s: %s: length error"
_RWSTD_ERROR_OUT_OF_RANGE     "%s: %s: argument value %u out of range [0, %u)"
_RWSTD_ERROR_RUNTIME_ERROR    "%s: %s: runtime error"
_RWSTD_ERROR_RANGE_ERROR      "%s: %s: range error: invalid range [%d, %d)"
_RWSTD_ERROR_OVERFLOW_ERROR   "%s: %s: overflow error"
_RWSTD_ERROR_UNDERFLOW_ERROR  "%s: %s: underflow error"

_RWSTD_ERROR_FAILBIT_SET      "%s: stream object has set ios::failbit"
_RWSTD_ERROR_BADBIT_SET       "%s: stream object has set ios::badbit"
_RWSTD_ERROR_EOFBIT_SET       "%s: stream object has set ios::eofbit"
_RWSTD_ERROR_IOSTATE_BIT_SET  "%s: stream object has set %s"

_RWSTD_ERROR_FACET_NOT_FOUND  "%s: %s: facet %u not found in %s locale"
_RWSTD_ERROR_LOCALE_BAD_NAME  "%s: %s: bad locale name: %s"
_RWSTD_ERROR_LOCALE_ERROR_NAME "%s: %s: failed to construct locale name"
_RWSTD_ERROR_CODECVT          "%s: %s: conversion failed"

_RWSTD_ERROR_BAD_POINTER      "%s: %s: invalid pointer %p"
_RWSTD_ERROR_TRANSFORM        "%s: %s: transformation failed"
END
