summaryrefslogtreecommitdiff
path: root/src/strings/astring.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/strings/astring.cpp')
-rw-r--r--src/strings/astring.cpp54
1 files changed, 9 insertions, 45 deletions
diff --git a/src/strings/astring.cpp b/src/strings/astring.cpp
index f1f12c3..e2521df 100644
--- a/src/strings/astring.cpp
+++ b/src/strings/astring.cpp
@@ -47,7 +47,6 @@ namespace strings
std::copy(src + 0, src + 255, dst);
}
- // TODO dedup all this code once I drop gcc 4.6 support
AString::AString()
: data{}, special()
{
@@ -100,78 +99,43 @@ namespace strings
}
AString::AString(const MString& s)
- : data{}, special()
+ : AString(s.begin(), s.end())
{
- if (s.size() > 255 || s.size() == 0)
- {
- new(r_ptr()) RString(s);
- special = 255;
- }
- else
- {
- *std::copy(s.begin(), s.end(), data) = '\0';
- special = 255 - s.size();
- }
}
AString::AString(XPair p)
- : data{}, special()
+ : AString(p.begin(), p.end())
{
- new(r_ptr()) RString();
- special = 255;
- *this = XString(p);
}
AString::AString(const TString& t)
- : data{}, special()
+ : AString(XString(t))
{
- new(r_ptr()) RString();
- special = 255;
- *this = XString(t);
}
AString::AString(const SString& s)
- : data{}, special()
+ : AString(XString(s))
{
- new(r_ptr()) RString();
- special = 255;
- *this = XString(s);
}
AString::AString(ZString z)
- : data{}, special()
+ : AString(XString(z))
{
- new(r_ptr()) RString();
- special = 255;
- *this = XString(z);
}
AString::AString(XString x)
- : data{}, special()
+ : AString()
{
if (const RString *r = x.base())
{
if (&*r->begin() == &*x.begin() && &*r->end() == &*x.end())
{
- new(r_ptr()) RString(*r);
- special = 255;
+ *this = *r;
return;
}
}
- if (x.size() > 255 || x.size() == 0)
- {
- new(r_ptr()) RString(x);
- special = 255;
- }
- else
- {
- *std::copy(x.begin(), x.end(), data) = '\0';
- special = 255 - x.size();
- }
+ *this = AString(x.begin(), x.end());
}
AString::AString(LString l)
- : data{}, special()
+ : AString(RString(l))
{
- new(r_ptr()) RString();
- special = 255;
- *this = XString(l);
}
AString::iterator AString::begin() const