source: CMT/v1r14p20031120/src/cmt_project.cxx @ 1

Last change on this file since 1 was 1, checked in by arnault, 19 years ago

Import all tags

File size: 4.7 KB
Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <ctype.h>
5
6#include "cmt_project.h"
7#include "cmt_database.h"
8
9/*----------------------------------------------------------*/
10/*                                                          */
11/*  Operations on Projects                                  */
12/*                                                          */
13/*----------------------------------------------------------*/
14
15class ProjectMgr
16{
17public:
18  static ProjectMgr& instance ()
19  {
20    static ProjectMgr me;
21
22    return (me);
23  }
24
25  Project& get_current_project ()
26  {
27    if (m_current_project == 0)
28      {
29        m_current_project = Project::add ("CMT", 0);
30      }
31
32    return (*m_current_project);
33  }
34
35  void set_current_project (Project* project)
36  {
37    m_current_project = project;
38  }
39
40private:
41
42  ProjectMgr () : m_current_project (0)
43  {
44  }
45
46  Project* m_current_project;
47};
48
49//----------------------------------------------------------
50Project* Project::find (const cmt_string& name)
51{
52  static ProjectVector& Projects = projects ();
53
54  for (int i = 0; i < Projects.size (); i++)
55    {
56      Project& p = Projects[i];
57
58      if (p.m_name == name) return (&p);
59    }
60
61  return (0);
62}
63
64//----------------------------------------------------------
65Project* Project::add (const cmt_string& name, Use* use)
66{
67  static ProjectVector& Projects = projects ();
68
69  {
70    Project* project;
71
72    project = find (name);
73    if (project != 0) return (project);
74  }
75
76  Project& project = Projects.add ();
77  project.set (name, use);
78
79  return (&project);
80}
81
82//----------------------------------------------------------
83void Project::action (const CmtSystem::cmt_string_vector& words, Use* use)
84{
85  cmt_string name;
86
87  if (words.size () < 1) return;
88
89  name = words[1];
90  if (name == "") return;
91
92  static ProjectMgr& mgr = ProjectMgr::instance ();
93
94  mgr.set_current_project (add (name, use));
95}
96
97//----------------------------------------------------------
98Project::ProjectVector& Project::projects ()
99{
100  static Database& db = Database::instance ();
101  static ProjectVector& Projects = db.projects ();
102
103  return (Projects);
104}
105
106/*----------------------------------------------------------*/
107void Project::clear_all ()
108{
109  static ProjectVector& Projects = projects ();
110
111  for (int i = 0; i < Projects.size (); i++)
112    {
113      Project& project = Projects[i];
114      project.clear ();
115    }
116
117  Projects.clear ();
118}
119
120/*----------------------------------------------------------*/
121void Project::show_all ()
122{
123  static ProjectVector& Projects = projects ();
124
125  for (int i = 0; i < Projects.size (); i++)
126    {
127      const Project& project = Projects[i];
128      project.show ();
129    }
130}
131
132//----------------------------------------------------------
133Project& Project::get_current_project ()
134{
135  static ProjectMgr& mgr = ProjectMgr::instance ();
136
137  return (mgr.get_current_project ());
138}
139
140//----------------------------------------------------------
141Project& Project::get_default_project ()
142{
143  Project* project = find ("CMT");
144  if (project == 0) project = Project::add ("CMT", 0);
145
146  return (*project);
147}
148
149//----------------------------------------------------------
150void Project::set_current_project (Project* project)
151{
152  static ProjectMgr& mgr = ProjectMgr::instance ();
153
154  mgr.set_current_project (project);
155}
156
157//----------------------------------------------------------
158Project::Project () : m_name (""), m_use (0)
159{
160}
161
162//----------------------------------------------------------
163const cmt_string& Project::name () const
164{
165  return (m_name);
166}
167
168//----------------------------------------------------------
169void Project::set (const cmt_string& name, Use* use)
170{
171  m_name = name;
172  m_use = use;
173}
174
175//----------------------------------------------------------
176void Project::clear ()
177{
178  m_name = "";
179  m_use = 0;
180}
181
182//----------------------------------------------------------
183Project& Project::operator = (const Project& other)
184{
185  m_name = other.m_name;
186
187  return (*this);
188}
189
190//----------------------------------------------------------
191bool Project::operator == (const cmt_string& name) const
192{
193  return ((m_name == name));
194}
195
196//----------------------------------------------------------
197bool Project::operator != (const cmt_string& name) const
198{
199  return ((m_name != name));
200}
201
202//----------------------------------------------------------
203const cmt_string& Project::get_name () const
204{
205  return (m_name);
206}
207
208//----------------------------------------------------------
209void Project::show () const
210{
211  cout << m_name;
212  cout << endl;
213}
214
215
Note: See TracBrowser for help on using the repository browser.