diff options
Diffstat (limited to 'build/target-type')
-rw-r--r-- | build/target-type | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/build/target-type b/build/target-type deleted file mode 100644 index e299fe2..0000000 --- a/build/target-type +++ /dev/null @@ -1,97 +0,0 @@ -// file : build/target-type -*- C++ -*- -// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#ifndef BUILD_TARGET_TYPE -#define BUILD_TARGET_TYPE - -#include <map> -#include <string> -#include <ostream> - -#include <build/types> - -namespace build -{ - class scope; - class target; - class target_key; - class prerequisite_key; - - // Target type. - // - // Note that we assume there is always a single instance of this class - // for any target type. As a result, we can use address comparison to - // determine if two target types are the same. - // - // - struct target_type - { - const char* name; - const target_type* base; - target* (*factory) (const target_type&, dir_path, string, const string*); - const string& (*extension) (const target_key&, scope&); - target* (*search) (const prerequisite_key&); - bool see_through; // A group with the default "see through" semantics. - - bool - is_a (const target_type&) const; // Defined in target.cxx - - template <typename T> - bool - is_a () const {return is_a (T::static_type);} - }; - - inline bool - operator< (const target_type& x, const target_type& y) {return &x < &y;} - - inline bool - operator== (const target_type& x, const target_type& y) {return &x == &y;} - - inline bool - operator!= (const target_type& x, const target_type& y) {return &x != &y;} - - inline std::ostream& - operator<< (std::ostream& os, const target_type& tt) {return os << tt.name;} - - // Target type map. - // - struct target_type_ref - { - // Like reference_wrapper except it sometimes deletes the target type. - // - explicit - target_type_ref (const target_type& r): p_ (&r), d_ (false) {} - - explicit - target_type_ref (unique_ptr<target_type>&& p) - : p_ (p.release ()), d_ (true) {} - - target_type_ref (target_type_ref&& r) - : p_ (r.p_), d_ (r.d_) {r.p_ = nullptr;} - - ~target_type_ref () {if (p_ != nullptr && d_) delete p_;} - - explicit operator const target_type& () const {return *p_;} - const target_type& get () const {return *p_;} - - private: - const target_type* p_; - bool d_; - }; - - using target_type_map_base = std::map<string, target_type_ref>; - - class target_type_map: public target_type_map_base - { - public: - void - insert (const target_type& tt) {emplace (tt.name, target_type_ref (tt));} - - template <typename T> - void - insert () {insert (T::static_type);} - }; -} - -#endif // BUILD_TARGET_TYPE |