Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
alabuzhev committed Apr 20, 2016
1 parent ff29373 commit 2470a3d
Show file tree
Hide file tree
Showing 9 changed files with 253 additions and 158 deletions.
111 changes: 56 additions & 55 deletions far/PluginA.cpp

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion far/changelog
@@ -1,4 +1,8 @@
zg 20.04.2016 13:21:24 +0200 - build 4629
drkns 20.04.2016 17:33:13 +0200 - build 4630

1. Рефакторинг.

zg 20.04.2016 13:21:24 +0200 - build 4629

1. уточнение 4628.

Expand Down
47 changes: 47 additions & 0 deletions far/common/algorithm.hpp
Expand Up @@ -126,4 +126,51 @@ void reorder(T& Values, Y& Indices)
}
}

namespace detail
{
template <class Container, class Predicate>
void erase_if_set_map(Container& c, const Predicate& pred)
{
for (auto i = c.begin(), End = c.end(); i != End; )
{
if (pred(*i))
{
i = c.erase(i);
}
else
{
++i;
}
}
}
}

// TODO: add proper overloads as per Library fundamentals TS v2: Uniform container erasure.
// Consider moving to cpp.hpp / std::experimental namespace for GCC, or just #include <experimental/...> for VS.

template <class Key, class Compare, class Alloc, class Predicate>
void erase_if(std::set<Key, Compare, Alloc>& Container, Predicate Pred) { detail::erase_if_set_map(Container, Pred); }

template <class Key, class Compare, class Alloc, class Predicate>
void erase_if(std::multiset<Key, Compare, Alloc>& Container, Predicate Pred) { detail::erase_if_set_map(Container, Pred); }

template <class Key, class T, class Compare, class Alloc, class Predicate>
void erase_if(std::map<Key, T, Compare, Alloc>& Container, Predicate Pred) { detail::erase_if_set_map(Container, Pred); }

template <class Key, class T, class Compare, class Alloc, class Predicate>
void erase_if(std::multimap<Key, T, Compare, Alloc>& Container, Predicate Pred) { detail::erase_if_set_map(Container, Pred); }

template <class Key, class Hash, class KeyEqual, class Alloc, class Predicate>
void erase_if(std::unordered_set<Key, Hash, KeyEqual, Alloc>& Container, Predicate Pred) { detail::erase_if_set_map(Container, Pred); }

template <class Key, class Hash, class KeyEqual, class Alloc, class Predicate>
void erase_if(std::unordered_multiset<Key, Hash, KeyEqual, Alloc>& Container, Predicate Pred) { detail::erase_if_set_map(Container, Pred); }

template <class Key, class T, class Hash, class KeyEqual, class Alloc, class Predicate>
void erase_if(std::unordered_map<Key, T, Hash, KeyEqual, Alloc>& Container, Predicate Pred) { detail::erase_if_set_map(Container, Pred); }

template <class Key, class T, class Hash, class KeyEqual, class Alloc, class Predicate>
void erase_if(std::unordered_multimap<Key, T, Hash, KeyEqual, Alloc>& Container, Predicate Pred) { detail::erase_if_set_map(Container, Pred); }


#endif // ALGORITHM_HPP_BBD588C0_4752_46B2_AAB9_65450622FFF0
17 changes: 8 additions & 9 deletions far/common/scope_exit.hpp
Expand Up @@ -35,23 +35,22 @@ namespace detail
class scope_guard
{
public:
scope_guard(F&& f) : m_f(std::move(f)) {}
scope_guard(F&& f): m_f(std::move(f)) {}
~scope_guard() { m_f(); }

private:
const F m_f;
};
}

class make_scope_guard
{
public:
template<typename F>
auto operator << (F&& f) { return scope_guard<F>(std::move(f)); }
};

class make_scope_guard
{
public:
template<typename F>
auto operator << (F&& f) { return detail::scope_guard<F>(std::move(f)); }
};

#define SCOPE_EXIT \
const auto ANONYMOUS_VARIABLE(scope_exit_guard) = detail::make_scope_guard() << [&]() /* lambda body here */
const auto ANONYMOUS_VARIABLE(scope_exit_guard) = make_scope_guard() << [&]() /* lambda body here */

#endif // SCOPE_EXIT_HPP_EDB9D84F_7B9F_408C_8FC8_94626C4B3CE3
8 changes: 1 addition & 7 deletions far/edit.cpp
Expand Up @@ -2146,13 +2146,7 @@ void Edit::AddColor(const ColorItem& col)

void Edit::DeleteColor(const delete_color_condition& Condition)
{
if (!ColorList.empty())
{
for (auto color = ColorList.cbegin(); color != ColorList.cend();)
{
if (Condition(*color)) ColorList.erase(color++); else ++color;
}
}
erase_if(ColorList, Condition);
}

bool Edit::GetColor(ColorItem& col, size_t Item) const
Expand Down
2 changes: 1 addition & 1 deletion far/farwinapi.hpp
Expand Up @@ -518,7 +518,7 @@ namespace os
{}
~module();

FARPROC GetProcAddress(const char* name) const { return ::GetProcAddress(get_module(), name); }
void* GetProcAddress(const char* name) const { return reinterpret_cast<void*>(::GetProcAddress(get_module(), name)); }
bool operator!() const noexcept { return !get_module(); }

private:
Expand Down

0 comments on commit 2470a3d

Please sign in to comment.