3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
13 #include "support/trivstring.h"
14 #include "support/docstring.h"
22 template trivial_string<char>::trivial_string(trivial_string const &);
23 template trivial_string<char_type>::trivial_string(trivial_string const &);
24 template<typename Char>
25 trivial_string<Char>::trivial_string(trivial_string const & that) : size_(that.size_)
28 copy(that.data_sso(), that.data_sso() + size_ + 1, data_sso());
30 data_ = new Char[size_ + 1];
31 copy(that.data_, that.data_ + size_ + 1, data_);
33 // else Happens only for really big Char types
37 template trivial_string<char>::trivial_string(string const &);
38 template trivial_string<char_type>::trivial_string(docstring const &);
39 template<typename Char>
40 trivial_string<Char>::trivial_string(
41 basic_string<Char, char_traits<Char>, allocator<Char> > const & that)
42 : size_(that.length())
45 copy(that.begin(), that.end(), data_sso());
46 data_sso()[size_] = '\0';
47 } else if (size_ > 0) {
48 data_ = new Char[size_ + 1];
49 copy(that.begin(), that.end(), data_);
52 // else Happens only for really big Char types
56 template trivial_string<char> &
57 trivial_string<char>::operator=(trivial_string const &);
58 template trivial_string<char_type> &
59 trivial_string<char_type>::operator=(trivial_string const &);
60 template<typename Char>
61 trivial_string<Char> & trivial_string<Char>::operator=(trivial_string const & that)
69 copy(that.data_sso(), that.data_sso() + size_ + 1, data_sso());
71 data_ = new Char[size_ + 1];
72 copy(that.data_, that.data_ + size_ + 1, data_);
74 // Happens only for really big Char types
81 template trivial_string<char> &
82 trivial_string<char>::operator=(string const &);
83 template trivial_string<char_type> &
84 trivial_string<char_type>::operator=(docstring const &);
85 template<typename Char>
86 trivial_string<Char> &
87 trivial_string<Char>::operator=(basic_string<Char, char_traits<Char>, allocator<Char> > const & that)
93 copy(that.begin(), that.end(), data_sso());
94 data_sso()[size_] = '\0';
95 } else if (size_ > 0) {
96 data_ = new Char[size_ + 1];
97 copy(that.begin(), that.end(), data_);
99 // Happens only for really big Char types
107 trivial_string<char>::swap(trivial_string<char> &);
109 trivial_string<char_type>::swap(trivial_string<char_type> &);
110 template<typename Char>
111 void trivial_string<Char>::swap(trivial_string & that)
113 size_t const sizetmp = that.size_;
116 Char * const datatmp = that.data_;
122 template<typename Char>
123 int trivial_string<Char>::compare(trivial_string const & other) const
125 size_t const lsize = this->length();
126 size_t const rsize = other.length();
127 size_t const len = min(lsize, rsize);
128 int r = char_traits<Char>::compare(c_str(), other.c_str(), len);
132 else if (lsize < rsize)
139 template string trivial_string<char>::str() const;
140 template docstring trivial_string<char_type>::str() const;
141 template<typename Char>
142 basic_string<Char, char_traits<Char>, allocator<Char> >
143 trivial_string<Char>::str() const
146 return basic_string<Char, char_traits<Char>, allocator<Char> >(
149 return basic_string<Char, char_traits<Char>, allocator<Char> >(
151 // Happens only for really big Char types
152 return basic_string<Char, char_traits<Char>, allocator<Char> >();
156 template char const * trivial_string<char>::c_str() const;
157 template char_type const * trivial_string<char_type>::c_str() const;
158 template<typename Char> Char const * trivial_string<Char>::c_str() const
164 // Happens only for really big Char types
165 static const Char empty_char = '\0';
170 template bool operator<(trivial_string<char> const &,
171 trivial_string<char> const &);
172 template bool operator<(trivial_string<char_type> const &,
173 trivial_string<char_type> const &);
174 template <typename Char>
175 bool operator<(trivial_string<Char> const & lhs, trivial_string<Char> const &rhs)
177 return lhs.compare(rhs) < 0;