Commit baafc39f authored by jan.koester's avatar jan.koester
Browse files

better perf

parent 1ac8675f
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -107,8 +107,12 @@ libhtmlpp::HtmlString::HtmlString(char str) : HtmlString(){
}

libhtmlpp::HtmlString::HtmlString(const std::string& str) : HtmlString(){
    std::copy(str.begin(),str.end(),std::insert_iterator<std::vector<char>>(_Data,_Data.begin()));
    _Data.erase(std::remove(_Data.begin(), _Data.end(), '\0'), _Data.end());
    auto clean_end = std::remove(str.begin(), str.end(), '\0');
    _Data.insert(_Data.end(), str.begin(), clean_end);

    if (_Data.empty() || _Data.back() != '\0') {
        _Data.push_back('\0');
    }
}

libhtmlpp::HtmlString::~HtmlString(){
@@ -119,16 +123,28 @@ libhtmlpp::HtmlString::HtmlString(const libhtmlpp::HtmlString& str) : HtmlString
}

void libhtmlpp::HtmlString::push_back(const char src){
    _Data.erase(std::remove(_Data.begin(), _Data.end(), '\0'), _Data.end());
    if(!src)
        return;

    if (!_Data.empty() && _Data.back() == '\0') {
        _Data.pop_back();
    }
    _Data.push_back(src);

    _Data.push_back('\0');
}

void libhtmlpp::HtmlString::append(const std::string& src) {
    if(src.empty())
        return;
    _Data.erase(std::remove(_Data.begin(), _Data.end(), '\0'), _Data.end());
    std::copy(src.begin(),src.end(),std::back_inserter(_Data));

    if (!_Data.empty() && _Data.back() == '\0') {
        _Data.pop_back();
    }

    auto clean_end = std::remove(src.begin(), src.end(), '\0');
    _Data.insert(_Data.end(), src.begin(), clean_end);

    _Data.push_back('\0');
}