100 lines
2.7 KiB
Text
100 lines
2.7 KiB
Text
// Filename: string
|
|
// Created by: drose (12May00)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
|
//
|
|
// All use of this software is subject to the terms of the revised BSD
|
|
// license. You should have received a copy of this license along
|
|
// with this source code in a file named "LICENSE."
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
// This file, and all the other files in this directory, aren't
|
|
// intended to be compiled--they're just parsed by CPPParser (and
|
|
// interrogate) in lieu of the actual system headers, to generate the
|
|
// interrogate database.
|
|
|
|
#ifndef STRING_H
|
|
#define STRING_H
|
|
|
|
#include <stdtypedefs.h>
|
|
#include <cwchar>
|
|
#include <stdint.h>
|
|
|
|
namespace std {
|
|
template<class charT> struct char_traits;
|
|
|
|
template<> struct char_traits<char> {
|
|
using char_type = char;
|
|
using int_type = int;
|
|
using state_type = mbstate_t;
|
|
};
|
|
|
|
template<> struct char_traits<char16_t> {
|
|
using char_type = char16_t;
|
|
using int_type = uint_least16_t;
|
|
using state_type = mbstate_t;
|
|
};
|
|
|
|
template<> struct char_traits<char32_t> {
|
|
using char_type = char32_t;
|
|
using int_type = uint_least32_t;
|
|
using state_type = mbstate_t;
|
|
};
|
|
|
|
template<> struct char_traits<wchar_t> {
|
|
using char_type = wchar_t;
|
|
using int_type = wint_t;
|
|
using state_type = mbstate_t;
|
|
};
|
|
|
|
template<class ctype>
|
|
class basic_string {
|
|
public:
|
|
struct iterator;
|
|
struct const_iterator;
|
|
struct reverse_iterator;
|
|
struct const_reverse_iterator;
|
|
|
|
typedef typename size_t size_type;
|
|
static const size_t npos = -1;
|
|
|
|
basic_string();
|
|
basic_string(const basic_string<ctype> ©);
|
|
void operator = (const basic_string<ctype> ©);
|
|
basic_string(const ctype *string);
|
|
~basic_string();
|
|
|
|
const ctype *c_str() const;
|
|
size_t length() const;
|
|
|
|
ctype at(size_t pos) const;
|
|
ctype operator[](size_t pos) const;
|
|
ctype &operator[](size_t pos);
|
|
};
|
|
|
|
typedef basic_string<char> string;
|
|
typedef basic_string<wchar_t> wstring;
|
|
typedef basic_string<char16_t> u16string;
|
|
typedef basic_string<char32_t> u32string;
|
|
|
|
template<class T> struct hash;
|
|
template<> struct hash<string>;
|
|
template<> struct hash<u16string>;
|
|
template<> struct hash<u32string>;
|
|
template<> struct hash<wstring>;
|
|
|
|
inline namespace literals {
|
|
inline namespace string_literals {
|
|
string operator "" s(const char *str, size_t len);
|
|
wstring operator "" s(const wchar_t *str, size_t len);
|
|
u16string operator "" s(const char16_t *str, size_t len);
|
|
u32string operator "" s(const char32_t *str, size_t len);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif
|