blob: 8982b1225615f7a9b26e93ba47a45b20328d9097 [file] [log] [blame]
/***************************************************************************
*
* catalog.h - Declarations for XPG4 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_CATALOG_H_INCLUDED
#define _RWSTD_CATALOG_H_INCLUDED
#include <map>
#include <string>
#include <rw/_defs.h>
#if defined (_WIN32) || defined (_WIN64)
# define _RWSTD_USE_RC 1
# include <windows.h>
#endif
#define NL_SETD 1 /* XPG3 Conformant Default set number. */
#define NL_CAT_LOCALE (-1) /* XPG4 requirement */
#define NL_CAT_LOCALE (-1) /* XPG4 requirement */
#define _RWCAT_COOKIE 0xAB34BC56
_RWSTD_NAMESPACE (__rw) {
#ifndef _RWSTD_USE_RC
// dummy implementation (does nothing)
class __rw_cat
{
public:
__rw_cat(const char*, int) { }
~__rw_cat() { }
__rw_cat* id () {
return this;
}
bool good () const {
return false;
}
const char* catgets (int, int, const char *__s) {
return __s;
}
};
#else // if defined (_RWSTD_USE_RC)
#define NL_TEXTMAX 8024
// Catalog type hold relationship between cat id and file
class __rw_cat
{
public:
typedef _STD::map<int, _STD::string, _STD::less<int>,
_STD::allocator<_STD::pair<const int, _STD::string> > >
__cat_type;
typedef __cat_type::value_type __msg_type;
protected:
HINSTANCE __cat;
__cat_type __msgs;
public:
__rw_cat (const char *__fname, int)
: __cat (__fname ? LoadLibrary (__fname) : GetModuleHandle (0)) { }
~__rw_cat () {
if (__cat)
FreeLibrary (__cat);
}
__rw_cat* id () {
return this;
}
bool good () {
return !!__cat;
}
HINSTANCE cat () {
return __cat;
}
const char* catgets (int, int, const char*);
};
#endif //_RWSTD_USE_RC
} // namespace __rw
typedef _RW::__rw_cat* nl_catd;
typedef int nl_item;
int catclose (nl_catd);
const char* catgets (nl_catd, int, int, const char*);
nl_catd catopen (const char*, int);
#endif // _RWSTD_CATALOG_H_INCLUDED