From add7ff74ca25ca2c9cc591abc484f8e6d38b2c39 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Mon, 11 Aug 2014 22:52:18 -0700 Subject: Optimize string literals in refcounted strings --- src/strings/rstring.tcc | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) (limited to 'src/strings/rstring.tcc') diff --git a/src/strings/rstring.tcc b/src/strings/rstring.tcc index c247b8f..8a85b1d 100644 --- a/src/strings/rstring.tcc +++ b/src/strings/rstring.tcc @@ -1,6 +1,6 @@ // strings/rstring.tcc - Inline functions for rstring.hpp // -// Copyright © 2013 Ben Longbons +// Copyright © 2013-2014 Ben Longbons // // This file is part of The Mana World (Athena server) // @@ -25,12 +25,11 @@ namespace tmwa namespace strings { template - void RString::_assign(It b, It e) + RString::RString(It b, It e) + : RString() { - owned = nullptr; if (b == e) { - *this = RString(); return; } if (!std::is_base_of::iterator_category>::value) @@ -43,23 +42,19 @@ namespace strings return; } size_t diff = std::distance(b, e); - owned = static_cast(::operator new(sizeof(Rep) + diff + 1)); - owned->count = 0; - owned->size = diff; - std::copy(b, e, owned->body); - owned->body[diff] = '\0'; - } + u.owned = static_cast(::operator new(sizeof(Rep) + diff + 1)); + maybe_end = nullptr; - template - RString::RString(It b, It e) - { - _assign(b, e); + u.owned->count = 0; + u.owned->size = diff; + std::copy(b, e, u.owned->body); + u.owned->body[diff] = '\0'; } template RString::RString(const VString& v) + : RString(v.begin(), v.end()) { - _assign(v.begin(), v.end()); } } // namespace strings } // namespace tmwa -- cgit v1.2.3-60-g2f50