Skip to content

Commit

Permalink
refactoring, some split of common.hpp, using IsProcessorFeaturePresen…
Browse files Browse the repository at this point in the history
…t to detect SSE2 absence
  • Loading branch information
alabuzhev committed Sep 2, 2017
1 parent b64cec9 commit 514dfb4
Show file tree
Hide file tree
Showing 33 changed files with 350 additions and 352 deletions.
6 changes: 6 additions & 0 deletions far/changelog
@@ -1,3 +1,9 @@
drkns 02.09.2017 15:38:54 +0100 - build 5020

1. Рефакторинг. Убран дублирующийся код и кое-что вынесено из common.hpp.

2. Используем IsProcessorFeaturePresent для определения отсутствия SSE2.

drkns 30.08.2017 20:44:52 +0100 - build 5019

1. Новые версии tinyxml2 и fmt.
Expand Down
73 changes: 35 additions & 38 deletions far/clipboard.cpp
Expand Up @@ -51,7 +51,7 @@ clipboard_mode default_clipboard_mode::get()
}

//-----------------------------------------------------------------------------
enum class Clipboard::clipboard_format
enum class clipboard::clipboard_format
{
vertical_block_oem,
vertical_block_unicode,
Expand All @@ -64,15 +64,11 @@ enum class Clipboard::clipboard_format
};

//-----------------------------------------------------------------------------
class system_clipboard: noncopyable, public Clipboard
class system_clipboard: public clipboard, public singleton<system_clipboard>, noncopyable
{
public:
static Clipboard& GetInstance()
{
static system_clipboard s_Clipboard;
return s_Clipboard;
}
IMPLEMENTS_SINGLETON(system_clipboard);

public:
virtual ~system_clipboard() override
{
system_clipboard::Close();
Expand Down Expand Up @@ -171,18 +167,14 @@ class system_clipboard: noncopyable, public Clipboard
};

//-----------------------------------------------------------------------------
class internal_clipboard: noncopyable, public Clipboard
class internal_clipboard: public clipboard, public singleton<internal_clipboard>, noncopyable
{
public:
static Clipboard& GetInstance()
{
static internal_clipboard s_Clipboard;
return s_Clipboard;
}
IMPLEMENTS_SINGLETON(internal_clipboard);

public:
static auto CreateInstance()
{
return std::unique_ptr<Clipboard>(new internal_clipboard);
return std::unique_ptr<clipboard>(new internal_clipboard);
}

virtual ~internal_clipboard() override
Expand Down Expand Up @@ -259,36 +251,41 @@ class internal_clipboard: noncopyable, public Clipboard
};

//-----------------------------------------------------------------------------
static thread_local Clipboard* OverridenInternalClipboard;
static thread_local clipboard* OverridenInternalClipboard;

void clipboard_restorer::operator()(Clipboard* Clip) const
void clipboard_restorer::operator()(clipboard* Clip) const
{
OverridenInternalClipboard = nullptr;
delete Clip;
}

std::unique_ptr<Clipboard, clipboard_restorer> OverrideClipboard()
std::unique_ptr<clipboard, clipboard_restorer> OverrideClipboard()
{
auto ClipPtr = internal_clipboard::CreateInstance();
OverridenInternalClipboard = ClipPtr.get();
return std::unique_ptr<Clipboard, clipboard_restorer>(ClipPtr.release());
return std::unique_ptr<clipboard, clipboard_restorer>(ClipPtr.release());
}

Clipboard& Clipboard::GetInstance(clipboard_mode Mode)
clipboard& clipboard::GetInstance(clipboard_mode Mode)
{
return OverridenInternalClipboard? *OverridenInternalClipboard :
Mode == clipboard_mode::system? system_clipboard::GetInstance() : internal_clipboard::GetInstance();
if (OverridenInternalClipboard)
return *OverridenInternalClipboard;

if (Mode == clipboard_mode::system)
return system_clipboard::instance();

return internal_clipboard::instance();
}

bool Clipboard::SetText(const wchar_t *Data, size_t Size)
bool clipboard::SetText(const string_view& Str)
{
if (!Clear())
return false;

if (!Data)
if (Str.empty())
return true;

auto hData = os::memory::global::copy(Data, Size);
auto hData = os::memory::global::copy(Str.data(), Str.size());
if (!hData)
return false;

Expand All @@ -297,17 +294,17 @@ bool Clipboard::SetText(const wchar_t *Data, size_t Size)

// 'Notepad++ binary text length'
// return value is ignored - non-critical feature
SetData(RegisterFormat(clipboard_format::notepad_plusplus_binary_text_length), os::memory::global::copy(static_cast<uint32_t>(Size)));
SetData(RegisterFormat(clipboard_format::notepad_plusplus_binary_text_length), os::memory::global::copy(static_cast<uint32_t>(Str.size())));

return true;
}

bool Clipboard::SetVText(const wchar_t *Data, size_t Size)
bool clipboard::SetVText(const string_view& Str)
{
if (!SetText(Data, Size))
if (!SetText(Str))
return false;

if (!Data)
if (Str.empty())
return true;

const auto FarVerticalBlock = RegisterFormat(clipboard_format::vertical_block_unicode);
Expand All @@ -329,7 +326,7 @@ bool Clipboard::SetVText(const wchar_t *Data, size_t Size)
return true;
}

bool Clipboard::SetHDROP(const string& NamesData, bool bMoved)
bool clipboard::SetHDROP(const string_view& NamesData, bool bMoved)
{
if (NamesData.empty())
return false;
Expand Down Expand Up @@ -362,7 +359,7 @@ bool Clipboard::SetHDROP(const string& NamesData, bool bMoved)
return SetData(RegisterFormat(clipboard_format::preferred_drop_effect), std::move(hMemoryMove));
}

bool Clipboard::GetText(string& Data) const
bool clipboard::GetText(string& Data) const
{
auto hClipData = GetData(CF_UNICODETEXT);
if (!hClipData)
Expand All @@ -387,7 +384,7 @@ bool Clipboard::GetText(string& Data) const
return true;
}

bool Clipboard::GetHDROPAsText(string& data) const
bool clipboard::GetHDROPAsText(string& data) const
{
const auto hClipData = GetData(CF_HDROP);
if (!hClipData)
Expand Down Expand Up @@ -418,7 +415,7 @@ bool Clipboard::GetHDROPAsText(string& data) const
return true;
}

bool Clipboard::GetVText(string& data) const
bool clipboard::GetVText(string& data) const
{
const auto& IsBorlandVerticalBlock = [this]
{
Expand Down Expand Up @@ -450,16 +447,16 @@ bool Clipboard::GetVText(string& data) const
}

//-----------------------------------------------------------------------------
bool SetClipboardText(const wchar_t* Data, size_t Size)
bool SetClipboardText(const string_view& Str)
{
clipboard_accessor Clip;
return Clip->Open() && Clip->SetText(Data, Size);
return Clip->Open() && Clip->SetText(Str);
}

bool SetClipboardVText(const wchar_t *Data, size_t Size)
bool SetClipboardVText(const string_view& Str)
{
clipboard_accessor Clip;
return Clip->Open() && Clip->SetVText(Data, Size);
return Clip->Open() && Clip->SetVText(Str);
}

bool GetClipboardText(string& data)
Expand Down
35 changes: 12 additions & 23 deletions far/clipboard.hpp
Expand Up @@ -51,25 +51,19 @@ class default_clipboard_mode
static clipboard_mode m_Mode;
};

class Clipboard
class clipboard
{
public:
static Clipboard& GetInstance(clipboard_mode Mode);
virtual ~Clipboard() = default;
static clipboard& GetInstance(clipboard_mode Mode);
virtual ~clipboard() = default;

virtual bool Open() = 0;
virtual bool Close() = 0;
virtual bool Clear() = 0;

bool SetText(const wchar_t *Data, size_t Size);
bool SetText(const wchar_t *Data) { return SetText(Data, wcslen(Data)); }
bool SetText(const string& Data) { return SetText(Data.data(), Data.size()); }

bool SetVText(const wchar_t *Data, size_t Size);
bool SetVText(const wchar_t *Data) { return SetVText(Data, wcslen(Data)); }
bool SetVText(const string& Data) { return SetVText(Data.data(), Data.size()); }

bool SetHDROP(const string& NamesData, bool bMoved);
bool SetText(const string_view& Str);
bool SetVText(const string_view& Str);
bool SetHDROP(const string_view& NamesData, bool bMoved);

bool GetText(string& data) const;
bool GetVText(string& data) const;
Expand All @@ -91,22 +85,17 @@ class Clipboard
class clipboard_accessor:noncopyable
{
public:
explicit clipboard_accessor(clipboard_mode Mode = default_clipboard_mode::get()): m_Clipboard(Clipboard::GetInstance(Mode)) {}
explicit clipboard_accessor(clipboard_mode Mode = default_clipboard_mode::get()): m_Clipboard(clipboard::GetInstance(Mode)) {}
~clipboard_accessor() { m_Clipboard.Close(); }
auto operator->() const { return &m_Clipboard; }

private:
Clipboard& m_Clipboard;
clipboard& m_Clipboard;
};


bool SetClipboardText(const wchar_t* Data, size_t Size);
inline bool SetClipboardText(const wchar_t* Data) { return SetClipboardText(Data, wcslen(Data)); }
inline bool SetClipboardText(const string& Data) { return SetClipboardText(Data.data(), Data.size()); }

bool SetClipboardVText(const wchar_t *Data, size_t Size);
inline bool SetClipboardVText(const wchar_t* Data) { return SetClipboardVText(Data, wcslen(Data)); }
inline bool SetClipboardVText(const string& Data) { return SetClipboardVText(Data.data(), Data.size()); }
bool SetClipboardText(const string_view& Str);
bool SetClipboardVText(const string_view& Str);

bool GetClipboardText(string& data);
bool GetClipboardVText(string& data);
Expand All @@ -117,9 +106,9 @@ bool CopyData(const clipboard_accessor& From, const clipboard_accessor& To);

struct clipboard_restorer
{
void operator()(Clipboard* Clip) const;
void operator()(clipboard* Clip) const;
};

std::unique_ptr<Clipboard, clipboard_restorer> OverrideClipboard();
std::unique_ptr<clipboard, clipboard_restorer> OverrideClipboard();

#endif // CLIPBOARD_HPP_989E040C_4D10_4D7C_88C0_5EF499171878

0 comments on commit 514dfb4

Please sign in to comment.