177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/*
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc.
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk.
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies.
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted,
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice.
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// WARNING: This is an internal header file, included by other C++
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// standard library headers.  You should not attempt to use this header
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// file directly.
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_COLLATE_H
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_INTERNAL_COLLATE_H
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_C_LOCALE_H
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/c_locale.h>
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_LOCALE_H
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_locale.h>
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_STRING_H
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_string.h>
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT> class collate {};
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT> class collate_byname {};
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC collate<char> : public locale::facet {
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef char   char_type;
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef string string_type;
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit collate(size_t __refs = 0) : locale::facet(__refs) {}
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  int compare(const char* __low1, const char* __high1,
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              const char* __low2, const char* __high2) const {
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return do_compare( __low1, __high1, __low2, __high2);
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  string_type transform(const char* __low, const char* __high) const {
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return do_transform(__low, __high);
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  long hash(const char* __low, const char* __high) const
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_hash(__low, __high); }
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static _STLP_STATIC_DECLSPEC locale::id id;
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~collate();
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual int do_compare(const char*, const char*,
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         const char*, const char*) const;
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual string_type do_transform(const char*, const char*) const;
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual long do_hash(const char*, const char*) const;
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate(const collate<char>&);
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate<char>& operator =(const collate<char>&);
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# ifndef _STLP_NO_WCHAR_T
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC collate<wchar_t> : public locale::facet {
8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef wchar_t char_type;
8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef wstring string_type;
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit collate(size_t __refs = 0) : locale::facet(__refs) {}
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  int compare(const wchar_t* __low1, const wchar_t* __high1,
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              const wchar_t* __low2, const wchar_t* __high2) const {
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return do_compare( __low1, __high1, __low2, __high2);
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  string_type transform(const wchar_t* __low, const wchar_t* __high) const {
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return do_transform(__low, __high);
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  long hash(const wchar_t* __low, const wchar_t* __high) const
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_hash(__low, __high); }
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static _STLP_STATIC_DECLSPEC locale::id id;
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~collate();
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual int do_compare(const wchar_t*, const wchar_t*,
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         const wchar_t*, const wchar_t*) const;
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual string_type do_transform(const wchar_t*, const wchar_t*) const;
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual long do_hash(const wchar_t* __low, const wchar_t* __high) const;
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate(const collate<wchar_t>&);
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate<wchar_t>& operator = (const collate<wchar_t>&);
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif /* NO_WCHAR_T */
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC collate_byname<char>: public collate<char> {
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  friend class _Locale_impl;
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit collate_byname(const char* __name, size_t __refs = 0);
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~collate_byname();
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual int do_compare(const char*, const char*,
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         const char*, const char*) const;
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual string_type do_transform(const char*, const char*) const;
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate_byname(_Locale_collate *__coll)
12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_collate(__coll) {}
13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Locale_collate* _M_collate;
13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate_byname(const collate_byname<char>&);
13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate_byname<char>& operator =(const collate_byname<char>&);
13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# ifndef _STLP_NO_WCHAR_T
13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC collate_byname<wchar_t>: public collate<wchar_t> {
13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  friend class _Locale_impl;
14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit collate_byname(const char * __name, size_t __refs = 0);
14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:
14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~collate_byname();
14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual int do_compare(const wchar_t*, const wchar_t*,
14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         const wchar_t*, const wchar_t*) const;
14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual string_type do_transform(const wchar_t*, const wchar_t*) const;
14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate_byname(_Locale_collate *__coll)
15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_collate(__coll) {}
15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Locale_collate* _M_collate;
15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate_byname(const collate_byname<wchar_t>&);
15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate_byname<wchar_t>& operator =(const collate_byname<wchar_t>&);
15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif /* NO_WCHAR_T */
15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits, class _Alloc>
16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool
16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__locale_do_operator_call (const locale& __loc,
16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           const basic_string<_CharT, _Traits, _Alloc>& __x,
16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           const basic_string<_CharT, _Traits, _Alloc>& __y) {
16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  collate<_CharT> const& __coll = use_facet<collate<_CharT> >(__loc);
16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __coll.compare(__x.data(), __x.data() + __x.size(),
16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                        __y.data(), __y.data() + __y.size()) < 0;
16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_INTERNAL_COLLATE_H */
17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables:
17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++
17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End:
177