diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2014-08-11 22:52:18 -0700 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2014-08-25 17:58:12 -0700 |
commit | add7ff74ca25ca2c9cc591abc484f8e6d38b2c39 (patch) | |
tree | c62ef1510966effdf81bec6710125b75783ff512 /src/strings/rstring.tcc | |
parent | 54df2e07fc4cc0bd8557e4152be15353ecf53d0d (diff) | |
download | tmwa-add7ff74ca25ca2c9cc591abc484f8e6d38b2c39.tar.gz tmwa-add7ff74ca25ca2c9cc591abc484f8e6d38b2c39.tar.bz2 tmwa-add7ff74ca25ca2c9cc591abc484f8e6d38b2c39.tar.xz tmwa-add7ff74ca25ca2c9cc591abc484f8e6d38b2c39.zip |
Optimize string literals in refcounted strings
Diffstat (limited to 'src/strings/rstring.tcc')
-rw-r--r-- | src/strings/rstring.tcc | 25 |
1 files changed, 10 insertions, 15 deletions
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 <b.r.longbons@gmail.com> +// Copyright © 2013-2014 Ben Longbons <b.r.longbons@gmail.com> // // This file is part of The Mana World (Athena server) // @@ -25,12 +25,11 @@ namespace tmwa namespace strings { template<class It> - 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<std::forward_iterator_tag, typename std::iterator_traits<It>::iterator_category>::value) @@ -43,23 +42,19 @@ namespace strings return; } size_t diff = std::distance(b, e); - owned = static_cast<Rep *>(::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<Rep *>(::operator new(sizeof(Rep) + diff + 1)); + maybe_end = nullptr; - template<class It> - 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<uint8_t n> RString::RString(const VString<n>& v) + : RString(v.begin(), v.end()) { - _assign(v.begin(), v.end()); } } // namespace strings } // namespace tmwa |