basic_stringstream with unsigned short

Discussion in 'C++' started by wolverine, Oct 30, 2006.

  1. wolverine

    wolverine Guest

    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.
    wolverine, Oct 30, 2006
    #1
    1. Advertising

  2. wolverine

    Bo Persson Guest

    wolverine wrote:
    > 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
    Bo Persson, Oct 30, 2006
    #2
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Andy
    Replies:
    2
    Views:
    293
  2. Replies:
    4
    Views:
    794
    Kaz Kylheku
    Oct 17, 2006
  3. wolverine
    Replies:
    0
    Views:
    346
    wolverine
    Oct 30, 2006
  4. fancyerii
    Replies:
    21
    Views:
    1,438
    Roedy Green
    Nov 5, 2007
  5. Ioannis Vranos

    unsigned short, short literals

    Ioannis Vranos, Mar 4, 2008, in forum: C Programming
    Replies:
    5
    Views:
    652
    Eric Sosman
    Mar 5, 2008
Loading...

Share This Page