Use reference and if-statement

This commit is contained in:
Jefe Wegher 2020-02-14 12:22:18 -08:00
parent e03e7dadd6
commit 558e474751

View File

@ -58,7 +58,7 @@ struct get_idx<Key, typename std::enable_if<std::is_signed<Key>::value>::type> {
template <typename Key, typename Enable = void>
struct remove_idx {
static bool remove(std::vector<node*>&, const Key&, std::size_t*) {
static bool remove(std::vector<node*>&, const Key&, std::size_t&) {
return false;
}
};
@ -69,13 +69,14 @@ struct remove_idx<
!std::is_same<Key, bool>::value>::type> {
static bool remove(std::vector<node*>& sequence, const Key& key,
std::size_t* seqSize) {
std::size_t& seqSize) {
if (key >= sequence.size()) {
return false;
} else {
bool defined = sequence[key]->is_defined();
sequence.erase(sequence.begin() + key);
*seqSize -= static_cast<size_t>(defined && *seqSize > key);
if (seqSize > key) {
--seqSize;
}
return true;
}
}
@ -86,7 +87,7 @@ struct remove_idx<Key,
typename std::enable_if<std::is_signed<Key>::value>::type> {
static bool remove(std::vector<node*>& sequence, const Key& key,
std::size_t* seqSize) {
std::size_t& seqSize) {
return key >= 0 ? remove_idx<std::size_t>::remove(
sequence, static_cast<std::size_t>(key), seqSize)
: false;
@ -167,7 +168,7 @@ inline node& node_data::get(const Key& key, shared_memory_holder pMemory) {
template <typename Key>
inline bool node_data::remove(const Key& key, shared_memory_holder pMemory) {
if (m_type == NodeType::Sequence) {
return remove_idx<Key>::remove(m_sequence, key, &m_seqSize);
return remove_idx<Key>::remove(m_sequence, key, m_seqSize);
} else if (m_type == NodeType::Map) {
kv_pairs::iterator it = m_undefinedPairs.begin();
while (it != m_undefinedPairs.end()) {