Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
alabuzhev committed Jul 3, 2016
1 parent aa621e6 commit 30ad9eb
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 14 deletions.
4 changes: 4 additions & 0 deletions far/changelog
@@ -1,3 +1,7 @@
drkns 03.07.2016 18:07:21 +0200 - build 4734

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

drkns 02.07.2016 15:10:30 +0200 - build 4733

1. 0003261: Crash on ф: in command line
Expand Down
25 changes: 25 additions & 0 deletions far/common/algorithm.hpp
Expand Up @@ -166,4 +166,29 @@ template <class Key, class T, class Hash, class KeyEqual, class Alloc, class Pre
void erase_if(std::unordered_multimap<Key, T, Hash, KeyEqual, Alloc>& Container, Predicate Pred) { detail::erase_if_set_map(Container, Pred); }


namespace detail
{
template<typename T, typename = std::void_t<>>
struct has_emplace_hint: std::false_type {};

template<typename T>
struct has_emplace_hint<T, std::void_t<decltype(std::declval<T&>().emplace_hint(std::declval<T&>().end(), *std::declval<T&>().begin()))>>: std::true_type {};

template<typename T>
using has_emplace_hint_t = typename has_emplace_hint<T>::type;
}

// Unified container emplace
template<typename container, typename... args>
std::enable_if_t<detail::has_emplace_hint_t<container>::value> emplace(container& Container, args&&... Args)
{
Container.emplace_hint(Container.end(), std::forward<args>(Args)...);
}

template<typename container, typename... args>
std::enable_if_t<!detail::has_emplace_hint_t<container>::value> emplace(container& Container, args&&... Args)
{
Container.emplace(Container.end(), std::forward<args>(Args)...);
}

#endif // ALGORITHM_HPP_BBD588C0_4752_46B2_AAB9_65450622FFF0
2 changes: 2 additions & 0 deletions far/cpp.hpp
Expand Up @@ -96,6 +96,8 @@ namespace std
{
return il.begin();
}

template<typename...> using void_t = void;
}
#endif

Expand Down
4 changes: 2 additions & 2 deletions far/elevation.cpp
Expand Up @@ -142,15 +142,15 @@ T elevation::Read() const
}

template<typename T, typename... args>
void elevation::Write(const T& Data, args... Args) const
void elevation::Write(const T& Data, args&&... Args) const
{
if (!pipe::Write(m_Pipe, Data))
throw MAKE_FAR_EXCEPTION("Pipe write error");
Write(std::forward<args>(Args)...);
}

template<typename... args>
void elevation::SendCommand(ELEVATION_COMMAND Command, args... Args) const
void elevation::SendCommand(ELEVATION_COMMAND Command, args&&... Args) const
{
Write(Command);
Write(std::forward<args>(Args)...);
Expand Down
4 changes: 2 additions & 2 deletions far/elevation.hpp
Expand Up @@ -92,10 +92,10 @@ class elevation: noncopyable
static void Write() {};

template<typename T, typename... args>
void Write(const T& Data, args... Args) const;
void Write(const T& Data, args&&... Args) const;

template<typename... args>
void SendCommand(ELEVATION_COMMAND Command, args... Args) const;
void SendCommand(ELEVATION_COMMAND Command, args&&... Args) const;

void RetrieveLastError() const;

Expand Down
2 changes: 1 addition & 1 deletion far/farexcpt.cpp
Expand Up @@ -263,7 +263,7 @@ static void write_minidump(EXCEPTION_POINTERS *ex_pointers)
if (DumpFile.Open(Global->Opt->LocalProfilePath + L"\\Far.mdmp", GENERIC_WRITE, FILE_SHARE_READ, nullptr, CREATE_ALWAYS))
{
MINIDUMP_EXCEPTION_INFORMATION Mei = { GetCurrentThreadId(), ex_pointers };
Imports().MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), DumpFile.native_handle(), MiniDumpWithFullMemory, ex_pointers ? &Mei : nullptr, nullptr, nullptr);
Imports().MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), DumpFile.handle().native_handle(), MiniDumpWithFullMemory, ex_pointers ? &Mei : nullptr, nullptr, nullptr);
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions far/farwinapi.hpp
Expand Up @@ -278,10 +278,10 @@ namespace os
void Close();
bool Eof() const;
const string& GetName() const { return name; }
HANDLE native_handle() const { return Handle.native_handle(); }
const auto& handle() const { return Handle; }

private:
handle Handle;
os::handle Handle;
uint64_t Pointer;
bool NeedSyncPointer;
string name;
Expand Down
4 changes: 2 additions & 2 deletions far/privilege.hpp
Expand Up @@ -44,14 +44,14 @@ namespace os
TRIVIALLY_MOVABLE(privilege);

template<class... args>
privilege(args... Args): privilege({ Args... }) {}
privilege(args&&... Args): privilege({ std::forward<args>(Args)... }) {}
privilege(const std::initializer_list<const wchar_t*>& Names): privilege(Names.begin(), Names.size()) {}
privilege(const std::vector<const wchar_t*>& Names): privilege(Names.data(), Names.size()) {}
privilege(const wchar_t* const* Names, size_t Size);
~privilege();

template<class... args>
static bool check(args... Args) { return check({ Args... }); }
static bool check(args&&... Args) { return check({ std::forward<args>(Args)... }); }
static bool check(const std::initializer_list<const wchar_t*>& Names) { return check(Names.begin(), Names.size()); }
static bool check(const std::vector<const wchar_t*>& Names) { return check(Names.data(), Names.size()); }
static bool check(const wchar_t* const* Names, size_t Size);
Expand Down
8 changes: 4 additions & 4 deletions far/strmix.hpp
Expand Up @@ -159,12 +159,12 @@ enum STL_FLAGS

void split(const string& InitString, DWORD Flags, const wchar_t* Separators, const std::function<void(string&&)>& inserter);

template <class Container>
template <typename container>
auto split(const string& InitString, DWORD Flags = 0, const wchar_t* Separators = L";,")
{
Container C;
split(InitString, Flags, Separators, [&](string&& str) { C.emplace(C.end(), std::move(str)); });
return C;
container Container;
split(InitString, Flags, Separators, [&](string&& Str) { emplace(Container, std::move(Str)); });
return Container;
}

template<class container>
Expand Down
2 changes: 1 addition & 1 deletion far/vbuild.m4
@@ -1 +1 @@
m4_define(BUILD,4733)m4_dnl
m4_define(BUILD,4734)m4_dnl

0 comments on commit 30ad9eb

Please sign in to comment.