diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-06-12 18:45:13 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-06-12 18:45:13 +0000 |
| commit | 5710893dd53bf07b406b25313618f247091c113b (patch) | |
| tree | 3d90463ff658b30b8537632e4e13c9246ebcd862 /src | |
| parent | e36b3565bf2f3ed9b071542451d11b8d3459c657 (diff) | |
Cleanup utils.hh, remove auto_raii in favor of on_scope_end
Diffstat (limited to 'src')
| -rw-r--r-- | src/completion.cc | 3 | ||||
| -rw-r--r-- | src/utils.hh | 107 |
2 files changed, 50 insertions, 60 deletions
diff --git a/src/completion.cc b/src/completion.cc index 8b1e8757..06cf0856 100644 --- a/src/completion.cc +++ b/src/completion.cc @@ -25,7 +25,8 @@ CandidateList complete_filename(const String& prefix, fileprefix = String(dir_end + 1, real_prefix.end()); } - auto dir = auto_raii(opendir(dirname.c_str()), closedir); + DIR* dir = opendir(dirname.c_str()); + auto closeDir = on_scope_end([=](){ closedir(dir); }); CandidateList result; if (not dir) diff --git a/src/utils.hh b/src/utils.hh index 32e593b8..ebde984f 100644 --- a/src/utils.hh +++ b/src/utils.hh @@ -9,58 +9,10 @@ namespace Kakoune { - -template<typename Container> -struct ReversedContainer -{ - ReversedContainer(Container& container) : container(container) {} - Container& container; - - decltype(container.rbegin()) begin() { return container.rbegin(); } - decltype(container.rend()) end() { return container.rend(); } -}; - -template<typename Container> -ReversedContainer<Container> reversed(Container& container) -{ - return ReversedContainer<Container>(container); -} - -template<typename T> -bool operator== (const std::unique_ptr<T>& lhs, T* rhs) -{ - return lhs.get() == rhs; -} - -template<typename T, typename F> -class AutoRaii -{ -public: - AutoRaii(T* resource, F cleanup) - : m_resource(resource), m_cleanup(cleanup) {} - - AutoRaii(AutoRaii&& other) : m_resource(other.m_resource), - m_cleanup(other.m_cleanup) - { other.m_resource = nullptr; } - - AutoRaii(const AutoRaii&) = delete; - AutoRaii& operator=(const AutoRaii&) = delete; - - ~AutoRaii() { if (m_resource) m_cleanup(m_resource); } - - operator T*() { return m_resource; } - -private: - T* m_resource; - F m_cleanup; -}; - -template<typename T, typename F> -AutoRaii<T, F> auto_raii(T* resource, F cleanup) -{ - return AutoRaii<T, F>(resource, cleanup); -} - +// *** Singleton *** +// +// Singleton helper class, every singleton type T should inherit +// from Singleton<T> to provide a consistent interface. template<typename T> class Singleton { @@ -76,8 +28,8 @@ public: static void delete_instance() { - if (ms_instance) - delete ms_instance; + delete ms_instance; + ms_instance = nullptr; } protected: @@ -100,6 +52,25 @@ private: template<typename T> T* Singleton<T>::ms_instance = nullptr; +// *** Containers helpers *** + +template<typename Container> +struct ReversedContainer +{ + ReversedContainer(Container& container) : container(container) {} + Container& container; + + decltype(container.rbegin()) begin() { return container.rbegin(); } + decltype(container.rend()) end() { return container.rend(); } +}; + +template<typename Container> +ReversedContainer<Container> reversed(Container& container) +{ + return ReversedContainer<Container>(container); +} + + template<typename Container, typename T> auto find(Container& container, const T& value) -> decltype(container.begin()) { @@ -112,11 +83,16 @@ bool contains(const Container& container, const T& value) return find(container, value) != container.end(); } -inline String str_to_str(const String& str) -{ - return str; -} - +// *** On scope end *** +// +// on_scope_end provides a way to register some code to be +// executed when current scope closes. +// +// usage: +// auto cleaner = on_scope_end([]() { ... }); +// +// This permits to cleanup c-style resources without implementing +// a wrapping class template<typename T> class OnScopeEnd { @@ -133,6 +109,19 @@ OnScopeEnd<T> on_scope_end(T t) return OnScopeEnd<T>(t); } +// *** Misc helper functions *** + +template<typename T> +bool operator== (const std::unique_ptr<T>& lhs, T* rhs) +{ + return lhs.get() == rhs; +} + +inline String str_to_str(const String& str) +{ + return str; +} + } #endif // utils_hh_INCLUDED |
