aboutsummaryrefslogtreecommitdiff
path: root/build/prerequisite
diff options
context:
space:
mode:
Diffstat (limited to 'build/prerequisite')
-rw-r--r--build/prerequisite129
1 files changed, 0 insertions, 129 deletions
diff --git a/build/prerequisite b/build/prerequisite
deleted file mode 100644
index c435fd3..0000000
--- a/build/prerequisite
+++ /dev/null
@@ -1,129 +0,0 @@
-// file : build/prerequisite -*- C++ -*-
-// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#ifndef BUILD_PREREQUISITE
-#define BUILD_PREREQUISITE
-
-#include <set>
-#include <string>
-#include <iosfwd>
-#include <utility> // move
-#include <cassert>
-#include <functional> // reference_wrapper
-
-#include <build/types>
-#include <build/target-key>
-#include <build/utility> // extension_pool
-#include <build/diagnostics>
-
-namespace build
-{
- class scope;
- class target;
-
- // Light-weight (by being shallow-pointing) prerequisite key, similar
- // to (and based on) target key.
- //
- class prerequisite_key
- {
- public:
- typedef build::scope scope_type;
-
- mutable const std::string* proj; // Can be NULL, from project_name_pool.
- target_key tk;
- mutable scope_type* scope; // Can be NULL if tk.dir is absolute.
- };
-
- inline bool
- operator< (const prerequisite_key& x, const prerequisite_key& y)
- {
- assert (x.scope == y.scope);
-
- // Can compare project name pointers since they are from project_name_pool.
- //
- return x.proj < y.proj || (x.proj == y.proj && x.tk < y.tk);
- }
-
- std::ostream&
- operator<< (std::ostream&, const prerequisite_key&);
-
- class prerequisite
- {
- public:
- typedef build::target target_type;
- typedef build::target_type target_type_type;
- typedef build::scope scope_type;
-
- prerequisite (const std::string* p,
- const target_type_type& t,
- dir_path d,
- std::string n,
- const std::string* e,
- scope_type& s)
- : proj (p),
- type (t),
- dir (std::move (d)),
- name (std::move (n)),
- ext (e),
- scope (s),
- target (nullptr) {}
-
- public:
- const std::string* proj; // NULL if not project-qualified.
- const target_type_type& type;
- const dir_path dir; // Normalized absolute or relative (to scope).
- const std::string name;
- const std::string* ext; // NULL if unspecified.
- scope_type& scope;
- target_type* target; // NULL if not yet resolved. Note that this should
- // always be the "primary target", not a member of
- // a target group.
- prerequisite_key
- key () const
- {
- return prerequisite_key {proj, {&type, &dir, &name, &ext}, &scope};
- }
-
- public:
- // Prerequisite (target) type.
- //
- template <typename T>
- bool
- is_a () const {return type.is_a<T> ();}
- };
-
- inline bool
- operator< (const prerequisite& x, const prerequisite& y)
- {
- return x.key () < y.key ();
- }
-
- inline std::ostream&
- operator<< (std::ostream& os, const prerequisite& p)
- {
- return os << p.key ();
- }
-
- // Set of prerequisites in a scope.
- //
- struct prerequisite_set: std::set<prerequisite>
- {
- std::pair<prerequisite&, bool>
- insert (const std::string* proj,
- const target_type&,
- dir_path dir,
- std::string name,
- const std::string* ext,
- scope&,
- tracer&);
-
- std::pair<prerequisite&, bool>
- insert (const std::string* proj, const target_key& tk, scope& s, tracer& t)
- {
- return insert (proj, *tk.type, *tk.dir, *tk.name, *tk.ext, s, t);
- }
- };
-}
-
-#endif // BUILD_PREREQUISITE