basic_stringstream with unsigned short

W

wolverine

Hi,
Given below is a traits with unsigned short. If i create a
stringstream with this traits will there be any problem.

struct XMLCh_traits
{
typedef unsigned short char_type;

typedef unsigned int int_type;

typedef streampos pos_type;
typedef streamoff off_type;
typedef mbstate_t state_type;

static void assign(char_type& __c1, const char_type& __c2)
{ __c1 = __c2; }

static bool eq(const char_type& __c1, const char_type& __c2)
{ return __c1 == __c2; }

static bool lt(const char_type& __c1, const char_type& __c2)
{ return __c1 < __c2; }

static int compare(const char_type* __s1, const char_type*
__s2, size_t __n)
{
for (size_t __i = 0; __i < __n; ++__i)
if (!eq(__s1[__i], __s2[__i]))
return lt(__s1[__i], __s2[__i]) ? -1 :
1;
return 0;
}

static size_t length(const char_type* __s)
{
const char_type* __p = __s;
while (*__p) ++__p;
return (__p - __s);
}

static const char_type* find(const char_type* __s, size_t __n,
const char_type& __a)
{
for (const char_type* __p = __s; size_t(__p - __s) <
__n; ++__p)
if (*__p == __a) return __p;
return 0;
}

static char_type* move(char_type* __s1, const char_type* __s2,
size_t __n)
{ return (char_type*) memmove(__s1, __s2, __n *
sizeof(char_type)); }

static char_type* copy(char_type* __s1, const char_type* __s2,
size_t __n)
{ return (char_type*) memcpy(__s1, __s2, __n *
sizeof(char_type)); }

static char_type* assign(char_type* __s, size_t __n, char_type
__a)
{
for (char_type* __p = __s; __p < __s + __n; ++__p)
assign(*__p, __a);
return __s;
}

static char_type to_char_type(const int_type& __c)
{ return char_type(__c); }

static int_type to_int_type(const char_type& __c)
{ return int_type(__c); }

static bool eq_int_type(const int_type& __c1, const int_type&
__c2)
{ return __c1 == __c2; }

static int_type eof() { return static_cast<int_type>(-1); }

static int_type not_eof(const int_type& __c)
{ return eq_int_type(__c, eof()) ? int_type(0) : __c; }

};

//typedef unsigned short XMLCh;
typedef std::basic_string<unsigned short, XMLCh_traits> uString;
typedef std::basic_stringstream<unsigned short, XMLCh_traits>
uStringStream;


unsigned short result;
//this _U is macro which uses XMLString::transcode
//to get a XMLCh* out of char*
uString str(_U("123"));
uStringStream stream(str);
stream>>result; // debugger showes this line causes aborting
cout<<result<<endl;

The program is getting ABORTED. Could any one tell me why ?

Thanks in Advance
Kiran Pradeep.
 
B

Bo Persson

wolverine said:
Hi,
Given below is a traits with unsigned short. If i create a
stringstream with this traits will there be any problem.

struct XMLCh_traits
snip

};

//typedef unsigned short XMLCh;
typedef std::basic_string<unsigned short, XMLCh_traits> uString;
typedef std::basic_stringstream<unsigned short, XMLCh_traits>
uStringStream;


unsigned short result;
//this _U is macro which uses XMLString::transcode
//to get a XMLCh* out of char*
uString str(_U("123"));
uStringStream stream(str);
stream>>result; // debugger showes this line causes aborting
cout<<result<<endl;

The program is getting ABORTED. Could any one tell me why ?

The string_stream does not only depend on char_traits, but also on locale
info implemented for your characetr type. In this case operator>>(unsigned
short&) is looking for a std::ctype<XMLCh>, which isn't available.


Fixing the std::locale for a new char type is really, really hard to do.
:-(


Bo Persson
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top