33#if defined (_RWSTD_NO_NL_TYPES_H) || defined (_RWSTD_NO_CATOPEN_CATGETS)
45typedef _STD::vector<__rw_cat*> CatVector;
47static CatVector __rw_catlist (2);
52 const char* __rw_cat::catgets(
int,
int msg_num,
const char*
s)
54 __cat_type::iterator it = __msgs.find(msg_num);
55 if (it != __msgs.end())
56 return (*it).second.c_str ();
59 if (LoadString(__cat,(
UINT)msg_num,
buf,NL_TEXTMAX))
61 pair<__cat_type::iterator,bool> ret =
62 __msgs.insert (__msg_type (msg_num,
string(
buf)));
64 return (*ret.first).second.c_str ();
72 CatVector::size_type __catfind(
nl_catd id)
74 for (CatVector::size_type
i = 0;
75 i < __rw_catlist.size() && __rw_catlist[
i]; ++
i) {
77 if (__rw_catlist[
i]->
id() ==
id)
81 return __rw_catlist.size();
96 cat =
new __rw_cat(
name,oflag);
98 if (cat && cat->good()) {
99 CatVector::size_type
i = 0;
100 for (;
i < __rw_catlist.size() && __rw_catlist[
i]; ++
i) ;
101 if (__rw_catlist.size() ==
i)
102 __rw_catlist.resize(__rw_catlist.size() * 2,0);
103 __rw_catlist[
i] = cat;
115const char *
catgets(
nl_catd catd,
int set_num,
int msg_num,
const char*
s)
119 CatVector::size_type
i = __catfind(catd);
120 if (
i < __rw_catlist.size())
121 return __rw_catlist[
i]->catgets(set_num,msg_num,
s);
133 CatVector::size_type
i = __catfind(catd);
134 if (
i < __rw_catlist.size())
136 delete __rw_catlist[
i];
138 CatVector::size_type
j;
139 for (
j =
i+1;
j < __rw_catlist.size() && __rw_catlist[
j];
j++)
140 __rw_catlist[
j-1] = __rw_catlist[
j];
141 if (
j < __rw_catlist.size())
144 __rw_catlist[__rw_catlist.size () - 1] = 0;
#define _RWSTD_NAMESPACE(name)
nl_catd catopen(const char *, int)
const char * catgets(nl_catd, int, int, const char *)