Main Page ? Class Hierarchy ? Compound List ? File List ? Compound Members ? File Members ?

SequenceRunner Class Reference

This very simplified sequence interpreter is meant for internal use only, for driving demo or test scenarios. More...

#include

Inheritance diagram for SequenceRunner:

Inheritance graph
[legend]
Collaboration diagram for SequenceRunner:

[legend]
List of all members.

Public Methods

? SequenceRunner ()
void? begin ()
void? filter (const cmt_string &line)
void? end ()

Private Attributes

bool? started
bool? running
cmt_string? style
cmt_string? vdir
cmt_string? package
cmt_string? version
cmt_string? filename
cmt_string? buffer
cmt_string? pwd

Detailed Description

This very simplified sequence interpreter is meant for internal use only, for driving demo or test scenarios.

This is run as follows:

> cd ../demo > cmt run_sequence xxx.cmt

where xxx.cmt is a text file containing descriptions of sequence steps:

sequence_step : package-creation | file-description | package-access | cmt-action | comment

package-creation : "%package" requirements-file

This creates a package from the current location, at version v1 structuration style is considered. Requirements file follows the statement.

requirements-file : file-contents

file-description : "%file" file-contents

Create a files relatively to the last created package.

package-access : "%cdpackage"

Move to the cmt directory of the specified package

cmt-action : "%cmt"

Perform the specified cmt action.

file-contents : line ...

comment : %%% ...

Definition at line 61 of file cmt_sequence.h.


Constructor & Destructor Documentation

SequenceRunner::SequenceRunner (? ? )?
?

Definition at line 10 of file cmt_sequence.cxx.

00011 {
00012 }

Member Function Documentation

void SequenceRunner::begin (? ? )? [virtual]
?

Reimplemented from Awk.

Definition at line 14 of file cmt_sequence.cxx.

References buffer, CmtSystem::file_separator(), filename, CmtSystem::getenv(), pwd, running, started, style, and vdir.

00015 {
00016   started = false;
00017   running = false;
00018   if (style == CmtSystem::getenv ("CMTSTRUCTURINGSTYLE"))
00019     {
00020       vdir = CmtSystem::file_separator (); 
00021       vdir += "v1"; 
00022     } 
00023   else
00024     {
00025       vdir = ""; 
00026     }
00027   package = "";
00028   filename = "";
00029   buffer = "";
00030   pwd = "";
00031 }

void SequenceRunner::end (? ? )? [virtual]
?

Reimplemented from Awk.

Definition at line 158 of file cmt_sequence.cxx.

References buffer, filename, running, and cmt_string::write().

00159 {
00160   if (running)
00161     {
00162       if (buffer != "")
00163         {
00164           buffer.write (filename);
00165           cout << "%%Writing file " << filename << endl;
00166             //cout << buffer << endl;
00167           buffer = "";
00168         }
00169       running = false;
00170     }
00171 }

void SequenceRunner::filter (? const cmt_string &? ? line )? [virtual]
?

Reimplemented from Awk.

Definition at line 33 of file cmt_sequence.cxx.

References buffer, CmtSystem::command_separator(), CmtSystem::dirname(), CmtSystem::execute(), CmtSystem::file_separator(), filename, CmtSystem::getenv(), CmtSystem::mkdir(), cmt_string::replace(), running, cmt_vector< cmt_string >::size(), CmtSystem::split(), cmt_string::substr(), and cmt_string::write().

00034 {
00035     //cout << "line=[" << line << "]" << endl;
00036   
00037   CmtSystem::cmt_string_vector words;
00038   
00039   CmtSystem::split (line, " \t", words);
00040   
00041   cmt_string verb;
00042   
00043   if (words.size () > 0) verb = words[0];
00044   
00045   if (verb.substr (0, 2) == "%%")
00046     {
00047       if (verb.substr (0, 3) == "%%%") return;
00048       
00049       if (running)
00050         {
00051           buffer.write (filename);
00052           cout << "%%Writing file " << filename << endl;
00053             //cout << buffer << endl;
00054           buffer = "";
00055           
00056           running = false;
00057         }
00058     }
00059   
00060   if (verb == "%%package")
00061     {
00062       package = words[1];
00063       version = words[2];
00064       
00065       if (version == "") version = "v1";
00066       
00067       cmt_string command = "cmt create ";
00068       command += package;
00069       command += " ";
00070       command += version;
00071       
00072       CmtSystem::execute (command);
00073       cout << "%% creating package " << package << " with command [" << command << "]" << endl;
00074 
00075       if (style == CmtSystem::getenv ("CMTSTRUCTURINGSTYLE"))
00076         {
00077           vdir = CmtSystem::file_separator (); 
00078           vdir += version; 
00079         } 
00080       else
00081         {
00082           vdir = ""; 
00083         }
00084       
00085       filename = package;
00086       filename += vdir;
00087       filename += CmtSystem::file_separator ();
00088       filename += "cmt";
00089       filename += CmtSystem::file_separator ();
00090       filename += "requirements";
00091       
00092       started = true;
00093     }
00094   else if (verb == "%%file") 
00095     {
00096       cmt_string file = words[1];
00097       
00098       cmt_string d = package;
00099       d += vdir;
00100       d += CmtSystem::file_separator ();
00101       d += file;
00102       CmtSystem::dirname (d, d);
00103       
00104       CmtSystem::mkdir (d);
00105       cout << "%% creating directory " << d << endl;
00106 
00107       buffer = "";
00108       
00109       filename = package;
00110       filename += vdir;
00111       filename += CmtSystem::file_separator ();
00112       filename += file; 
00113       started = true;
00114     }
00115   else if (verb == "%%cdpackage") 
00116     {
00117       package = words[1];
00118       
00119       pwd = package;
00120       pwd += vdir;
00121       pwd += CmtSystem::file_separator ();
00122       pwd += "cmt";
00123       cout << "%% moving to package " << package << endl;
00124     }
00125   else if (verb == "%%cmt") 
00126     {
00127       cmt_string command;
00128       
00129       if (pwd != "")
00130         {
00131           command = "cd ";
00132           command += pwd;
00133           command += " ";
00134           command += CmtSystem::command_separator ();
00135           command += " ";
00136         }
00137       
00138       command += line;
00139       command.replace ("%%", "");
00140       
00141       cout << "%% executing cmt command " << line << endl;
00142 
00143       CmtSystem::execute (command);
00144     }
00145   else
00146     {
00147       buffer += line;
00148       buffer += "\n";
00149     }
00150   
00151   if (started)
00152     {
00153       started = false;
00154       running = true;
00155     }
00156 }

Member Data Documentation

cmt_string SequenceRunner::buffer [private]
?

Definition at line 78 of file cmt_sequence.h.

Referenced by begin(), end(), and filter().

cmt_string SequenceRunner::filename [private]
?

Definition at line 77 of file cmt_sequence.h.

Referenced by begin(), end(), and filter().

cmt_string SequenceRunner::package [private]
?

Definition at line 75 of file cmt_sequence.h.

cmt_string SequenceRunner::pwd [private]
?

Definition at line 79 of file cmt_sequence.h.

Referenced by begin().

bool SequenceRunner::running [private]
?

Definition at line 72 of file cmt_sequence.h.

Referenced by begin(), end(), and filter().

bool SequenceRunner::started [private]
?

Definition at line 71 of file cmt_sequence.h.

Referenced by begin().

cmt_string SequenceRunner::style [private]
?

Definition at line 73 of file cmt_sequence.h.

Referenced by begin().

cmt_string SequenceRunner::vdir [private]
?

Definition at line 74 of file cmt_sequence.h.

Referenced by begin().

cmt_string SequenceRunner::version [private]
?

Definition at line 76 of file cmt_sequence.h.


The documentation for this class was generated from the following files:
Generated on Wed Sep 1 11:00:55 2004 for CMT by 1.2.18