void assign( char& lhs, char rhs )
PRUint32 readable_size( const char* s )
NS_SPECIALIZE_TEMPLATEstruct nsCharTraits<char>  {    typedef char      char_type;    typedef PRUnichar incompatible_char_type;    static    void    assign( char& lhs, char rhs )      {        lhs = rhs;      }      // integer representation of characters:    typedef int int_type;    static    char    to_char_type( int c )      {        return char(c);      }    static    int    to_int_type( char c )      {        return int( NS_STATIC_CAST(unsigned char, c) );      }    static    nsCharTraits_bool    eq_int_type( int lhs, int rhs )      {        return lhs == rhs;      }      // |char_type| comparisons:    static    nsCharTraits_bool    eq( char lhs, char rhs )      {        return lhs == rhs;      }    static    nsCharTraits_bool    lt( char lhs, char rhs )      {        return lhs < rhs;      }      // operations on s[n] arrays:    static    char*    move( char* s1, const char* s2, size_t n )      {        return NS_STATIC_CAST(char*, memmove(s1, s2, n));      }    static    char*    copy( char* s1, const char* s2, size_t n )      {        return NS_STATIC_CAST(char*, memcpy(s1, s2, n));      }    static    char*    assign( char* s, size_t n, char c )      {        return NS_STATIC_CAST(char*, memset(s, to_int_type(c), n));      }    static    int    compare( const char* s1, const char* s2, size_t n )      {        return memcmp(s1, s2, n);      }    static    size_t    length( const char* s )      {        return strlen(s);      }    static    const char*    find( const char* s, size_t n, char c )      {        return NS_STATIC_CAST(char*, memchr(s, to_int_type(c), n));      }#if 0      // I/O related:    typedef streamoff off_type;    typedef streampos pos_type;    typedef mbstate_t state_type;    static    int_type    eof()      {        return EOF;      }    static    int    not_eof( int c )      {        return c==eof() ? ~eof() : c;      }    // static state_type get_state( pos_type );#endif  };