Improve compile times by a huge amount
This commit is contained in:
parent
066d875f91
commit
15f3592270
@ -22,9 +22,9 @@
|
||||
#include <cstdlib> //size_t
|
||||
#include <utility> //move
|
||||
#include <cstring> //memcpy
|
||||
#include <algorithm> //max
|
||||
#include <type_traits>
|
||||
#include <new>
|
||||
#include <rexy/detail/util.hpp> //max
|
||||
#include <rexy/detail/default_allocator.hpp>
|
||||
|
||||
namespace rexy{
|
||||
@ -124,7 +124,7 @@ namespace rexy{
|
||||
}
|
||||
void append(const char* data, size_t len){
|
||||
if(m_size + len > m_cap)
|
||||
resize(std::max(m_cap*2, m_size+len));
|
||||
resize(detail::max(m_cap*2, m_size+len));
|
||||
memcpy(m_data+m_size, data, len);
|
||||
m_size += len;
|
||||
}
|
||||
|
||||
34
rexy/detail/util.hpp
Normal file
34
rexy/detail/util.hpp
Normal file
@ -0,0 +1,34 @@
|
||||
/**
|
||||
This file is a part of rexy's general purpose library
|
||||
Copyright (C) 2020 rexy712
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef REXY_DETAIL_UTIL_HPP
|
||||
#define REXY_DETAIL_UTIL_HPP
|
||||
|
||||
namespace rexy::detail{
|
||||
//including <algorithm> causes long compile times. so just make my own max instead
|
||||
template<class T>
|
||||
constexpr const T& max(const T& a, const T& b){
|
||||
return (a < b) ? b : a;
|
||||
}
|
||||
template<class T>
|
||||
constexpr const T& min(const T& a, const T& b){
|
||||
return (a > b) ? b : a;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -22,7 +22,8 @@
|
||||
#include <utility> //forward, move, swap, etc
|
||||
#include <cstdlib> //memcpy
|
||||
#include <cstring> //strlen, strcpy
|
||||
#include <algorithm> //max
|
||||
|
||||
#include <rexy/detail/util.hpp> //max
|
||||
|
||||
namespace rexy{
|
||||
template<class Allocator>
|
||||
@ -137,7 +138,7 @@ namespace rexy{
|
||||
m_length += len;
|
||||
m_data[m_length] = 0;
|
||||
}else{
|
||||
string_intermediary tmp(std::max(m_length + len, m_cap*2));
|
||||
string_intermediary tmp(detail::max(m_length + len, m_cap*2));
|
||||
memcpy(tmp.m_data, m_data, m_length);
|
||||
memcpy(tmp.m_data+m_length, data, len);
|
||||
tmp.m_length = len+m_length;
|
||||
@ -167,7 +168,7 @@ namespace rexy{
|
||||
strcpy(m_data, s);
|
||||
}else{
|
||||
Allocator::free(m_data);
|
||||
m_cap = std::max(len, m_cap*2);
|
||||
m_cap = detail::max(len, m_cap*2);
|
||||
m_data = reinterpret_cast<char*>(Allocator::copy(s, m_cap+1));
|
||||
if(!m_data){
|
||||
m_length = 0;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user