#include #include #include #include #include "cmt_project.h" #include "cmt_database.h" /*----------------------------------------------------------*/ /* */ /* Operations on Projects */ /* */ /*----------------------------------------------------------*/ class ProjectMgr { public: static ProjectMgr& instance () { static ProjectMgr me; return (me); } Project& get_current_project () { if (m_current_project == 0) { m_current_project = Project::add ("CMT", 0); } return (*m_current_project); } void set_current_project (Project* project) { m_current_project = project; } private: ProjectMgr () : m_current_project (0) { } Project* m_current_project; }; //---------------------------------------------------------- Project* Project::find (const cmt_string& name) { static ProjectVector& Projects = projects (); for (int i = 0; i < Projects.size (); i++) { Project& p = Projects[i]; if (p.m_name == name) return (&p); } return (0); } //---------------------------------------------------------- Project* Project::add (const cmt_string& name, Use* use) { static ProjectVector& Projects = projects (); { Project* project; project = find (name); if (project != 0) return (project); } Project& project = Projects.add (); project.set (name, use); return (&project); } //---------------------------------------------------------- void Project::action (const CmtSystem::cmt_string_vector& words, Use* use) { cmt_string name; if (words.size () < 1) return; name = words[1]; if (name == "") return; static ProjectMgr& mgr = ProjectMgr::instance (); mgr.set_current_project (add (name, use)); } //---------------------------------------------------------- Project::ProjectVector& Project::projects () { static Database& db = Database::instance (); static ProjectVector& Projects = db.projects (); return (Projects); } /*----------------------------------------------------------*/ void Project::clear_all () { static ProjectVector& Projects = projects (); for (int i = 0; i < Projects.size (); i++) { Project& project = Projects[i]; project.clear (); } Projects.clear (); } /*----------------------------------------------------------*/ void Project::show_all () { static ProjectVector& Projects = projects (); for (int i = 0; i < Projects.size (); i++) { const Project& project = Projects[i]; project.show (); } } //---------------------------------------------------------- Project& Project::get_current_project () { static ProjectMgr& mgr = ProjectMgr::instance (); return (mgr.get_current_project ()); } //---------------------------------------------------------- Project& Project::get_default_project () { Project* project = find ("CMT"); if (project == 0) project = Project::add ("CMT", 0); return (*project); } //---------------------------------------------------------- void Project::set_current_project (Project* project) { static ProjectMgr& mgr = ProjectMgr::instance (); mgr.set_current_project (project); } //---------------------------------------------------------- Project::Project () : m_name (""), m_use (0) { } //---------------------------------------------------------- const cmt_string& Project::name () const { return (m_name); } //---------------------------------------------------------- void Project::set (const cmt_string& name, Use* use) { m_name = name; m_use = use; } //---------------------------------------------------------- void Project::clear () { m_name = ""; m_use = 0; } //---------------------------------------------------------- Project& Project::operator = (const Project& other) { m_name = other.m_name; return (*this); } //---------------------------------------------------------- bool Project::operator == (const cmt_string& name) const { return ((m_name == name)); } //---------------------------------------------------------- bool Project::operator != (const cmt_string& name) const { return ((m_name != name)); } //---------------------------------------------------------- const cmt_string& Project::get_name () const { return (m_name); } //---------------------------------------------------------- void Project::show () const { cout << m_name; cout << endl; }