00001
00003 #ifndef ARTIFACT_HPP_
00004 #define ARTIFACT_HPP_
00005
00006 #include <ctime>
00007 #include <functional>
00008 #include <string>
00009
00011 class artifact_impl;
00012
00014 class artifact
00015 {
00016 public:
00018 artifact();
00021 artifact(std::string const& name);
00024 artifact(artifact const& a);
00026 ~artifact();
00027
00030 artifact& operator=(artifact const& a);
00031
00033 std::string const& name() const;
00035 std::time_t mod_time() const;
00039 std::string expand(std::string str) const;
00040
00042 void build();
00045 std::time_t get_mod_time();
00046
00050 void store_variable(std::string const& name, std::string const& value);
00051
00052 private:
00053 artifact_impl* pimpl_;
00054 };
00055
00057 template<class Char, class Traits>
00058 std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& out, artifact const& a)
00059 {
00060 out << a.name();
00061 return out;
00062 }
00063
00065 inline bool operator==(artifact const& a, artifact const& b)
00066 {
00067 return a.name() == b.name();
00068 }
00069
00071 inline bool operator!=(artifact const& a, artifact const& b)
00072 {
00073 return not(a == b);
00074 }
00075
00076 namespace std {
00078 template<>
00079 class less<artifact> : public std::binary_function<artifact, artifact, bool> {
00080 public:
00084 bool operator()(artifact const& a, artifact const& b)
00085 {
00086 return a.name() < b.name();
00087 }
00088 };
00089 }
00090
00091 #endif // ARTIFACT_HPP_