#include <cmt_pattern.h>
Collaboration diagram for Pattern:
Public Types |
|
| typedef cmt_vector< Pattern >? | PatternVector |
| typedef cmt_vector< Pattern * >? | PatternPtrVector |
Public Methods |
|
| ? | Pattern () |
| ? | ~Pattern () |
| void? | clear () |
| void? | apply () const |
| ? |
Applies a pattern to all uses (except CMT itself) between current and the use that declared the pattern. |
| void? | apply (Use *constext_use) const |
| void? | apply (Use *constext_use, const Template::TemplateVector &templates) const |
| ? |
Applies a pattern to one particular use. |
| void? | expand (Use *constext_use, const Template::TemplateVector &templates, cmt_string &line) const |
| void? | show () const |
Static Public Methods |
|
| void? | action (const CmtSystem::cmt_string_vector &words, Use *use) |
| Pattern *? | find (const cmt_string &name) |
| ? |
Patterns are stored with two keys : |
| Pattern *? | find (const cmt_string &name, Use *use) |
| void? | add (const cmt_string &name, const CmtSystem::cmt_string_vector &words, int start_index, bool global, Use *use) |
| int? | pattern_number () |
| ? |
Get the number of registered patterns. |
| Pattern &? | pattern (int index) |
| ? |
Get the index'th pattern in the database. |
| void? | clear_all () |
| PatternVector &? | patterns () |
| void? | apply_all_globals () |
| ? |
Applies all global patterns to all uses. |
| void? | apply_all_globals (Use *use) |
| ? |
Applies all global patterns to a given Use. |
| void? | show_all_names () |
| void? | show_all () |
| ? |
this is the cmt show patterns command It just shows the pattern declarations. |
| void? | show_all_applied_patterns () |
| ? |
this is the cmt show applied_patterns command It just shows the pattern applications. |
| void? | show (const cmt_string &name) |
| ? |
This is the cmt show pattern |
Public Attributes |
|
| cmt_string? | name |
| cmt_string? | line |
| bool? | global |
| Use *? | use |
|
| ? |
Definition at line 28 of file cmt_pattern.h. |
|
| ? |
Definition at line 27 of file cmt_pattern.h. |
|
| ? |
Definition at line 572 of file cmt_pattern.cxx. 00573 {
00574 }
|
|
| ? |
Definition at line 577 of file cmt_pattern.cxx. 00579 {
00580 }
|
|
||||||||||||
| ? |
Definition at line 155 of file cmt_pattern.cxx. References add(), global, name, cmt_vector< cmt_string >::size(), and CmtSystem::testenv(). Referenced by KwdPattern::action(). 00156 {
00157 bool global = false;
00158 int start_index;
00159
00160 if (words.size () < 2) return;
00161
00162 //
00163 // expected syntax is:
00164 //
00165 // pattern [-global] pattern-name any-cmt-statement
00166 //
00167 // where any-cmt-statement may contain "templates"
00168 //
00169 //
|
|
||||||||||||||||||||||||
| ? |
Definition at line 222 of file cmt_pattern.cxx. References PatternList::add(), cmt_vector< Pattern >::add(), PatternList::add_pattern(), clear(), cmt_string::find(), find(), global, line, name, cmt_string::npos, pattern(), patterns(), cmt_vector< cmt_string >::size(), and use. Referenced by action(). 00227 {
00228 static PatternVector& Patterns = patterns ();
00229
00230 Pattern* pattern;
00231
00232 pattern = find (name, use);
00233
00234 if (pattern == 0)
00235 {
00236 // No pattern for the pair
|
|
||||||||||||
| ? |
Applies a pattern to one particular use. Definition at line 728 of file cmt_pattern.cxx. References expand(), SyntaxParser::parse_requirements_text(), and CmtSystem::testenv(). 00730 {
00731 cmt_string replacement;
00732
00733 expand (context_use, templates, replacement);
00734
00735 if (CmtSystem::testenv ("CMTTESTPATTERN"))
00736 {
00737 cout << "Pattern::apply> replacement=[" << replacement << "]" << endl;
00738 }
00739
00740 if (replacement != "")
00741 {
00742 SyntaxParser::parse_requirements_text (replacement, "", context_use);
00743 }
00744 }
|
|
| ? |
Definition at line 718 of file cmt_pattern.cxx. References apply(). 00719 {
00720 static Template::TemplateVector dummy_templates;
00721
00722 apply (context_use, dummy_templates);
00723 }
|
|
| ? |
Applies a pattern to all uses (except CMT itself) between current and the use that declared the pattern. Definition at line 688 of file cmt_pattern.cxx. References Use::current(), IgnorePattern::find(), Cmt::get_debug(), PatternCache::get_list(), Use::get_ordered_uses(), Use::get_package_name(), name, cmt_vector< Use * >::size(), PatternCache::update(), and use. Referenced by ApplyPattern::apply(), apply(), PatternList::apply_all_globals(), and Use::apply_global_patterns(). 00689 {
00690 Use::UsePtrVector& uses = Use::get_ordered_uses ();
00691
00692 Use* current = &(Use::current());
00693
00694 if (Cmt::get_debug ())
00695 {
00696 cout << "Pattern(" << name << "::apply> " << " defined in " << use->get_package_name () << endl;
00697 }
00698
00699 if (!PatternCache::update (current, use)) return;
00700
00701 Use::UsePtrVector& list = PatternCache::get_list ();
00702
00703 for (int i = 0; i < list.size (); i++)
00704 {
00705 Use* u = list[i];
00706
00707 if (Cmt::get_debug ())
00708 {
00709 cout << "Pattern(" << name << "::apply> " << " to package " << u->get_package_name () << endl;
00710 }
00711
00712 if ((u->get_package_name () != "CMT") &&
00713 (IgnorePattern::find (name, u) == 0)) apply (u);
00714 }
00715 }
|
|
| ? |
Applies all global patterns to a given Use. Definition at line 466 of file cmt_pattern.cxx. References PatternList::apply_all_globals(). 00467 {
00468 PatternList::apply_all_globals ();
00469 }
|
|
| ? |
Applies all global patterns to all uses. Definition at line 458 of file cmt_pattern.cxx. References PatternList::apply_all_globals(). Referenced by Cmt::load(), and Cmt::reach_current_package(). 00459 {
00460 PatternList::apply_all_globals ();
00461 }
|
|
| ? |
Definition at line 583 of file cmt_pattern.cxx. References global, line, name, and use. Referenced by add(), and clear_all(). |
|
| ? |
Definition at line 323 of file cmt_pattern.cxx. References cmt_vector< Pattern >::clear(), clear(), patterns(), and cmt_vector< Pattern >::size(). Referenced by Database::clear(). 00324 {
00325 static PatternVector& Patterns = patterns ();
00326
00327 for (int i = 0; i < Patterns.size (); i++)
00328 {
00329 Pattern& p = Patterns[i];
00330 p.clear ();
00331 }
00332
00333 Patterns.clear ();
00334 }
|
|
||||||||||||||||
| ? |
Definition at line 747 of file cmt_pattern.cxx. References cmt_string::c_str(), Use::current(), cmt_string::erase(), cmt_string::find(), Use::get_package_name(), line, Template::name, cmt_string::npos, Use::prefix, Use::real_path, cmt_string::replace_all(), cmt_vector< Template >::size(), CmtSystem::testenv(), Template::value, and Use::version. Referenced by apply(), and ApplyPattern::show(). 00750 {
00751 if (context_use == 0) context_use = &(Use::current ());
00752
00753 if (CmtSystem::testenv ("CMTTESTPATTERN"))
00754 {
00755 cout << "Pattern::expand1> line=[" << line << "]" << endl;
00756 }
00757
00758 replacement = line;
00759
00760 if (replacement != "")
00761 {
00762 // Substitute templates from the cmt statement
00763 replacement.replace_all ("
|
|
||||||||||||
| ? |
Definition at line 214 of file cmt_pattern.cxx. References PatternList::find(). 00215 {
00216 Pattern* p = PatternList::find (name, use);
00217
00218 return (p);
00219 }
|
|
| ? |
Patterns are stored with two keys : thus search must done against these two keys. Definition at line 206 of file cmt_pattern.cxx. References PatternList::find_pattern(). Referenced by ApplyPattern::action(), add(), ApplyPattern::apply(), SyntaxParser::do_parse_words(), ApplyPattern::show(), and show(). 00207 {
00208 Pattern* p = PatternList::find_pattern (name);
00209
00210 return (p);
00211 }
|
|
| ? |
Get the index'th pattern in the database. Definition at line 315 of file cmt_pattern.cxx. References patterns(). Referenced by add(). 00316 {
00317 static PatternVector& Patterns = patterns ();
00318
00319 return (Patterns[index]);
00320 }
|
|
| ? |
Get the number of registered patterns. Definition at line 305 of file cmt_pattern.cxx. References patterns(), and cmt_vector< Pattern >::size(). 00306 {
00307 static PatternVector& Patterns = patterns ();
00308
00309 return (Patterns.size ());
00310 }
|
|
| ? |
Definition at line 337 of file cmt_pattern.cxx. References Database::instance(), and Database::patterns(). Referenced by add(), Use::apply_global_patterns(), clear_all(), pattern(), pattern_number(), and show(). 00338 {
00339 static Database& db = Database::instance ();
00340 static PatternVector& Patterns = db.patterns ();
00341
00342 return (Patterns);
00343 }
|
|
| ? |
Definition at line 592 of file cmt_pattern.cxx. References Use::get_package_name(), line, name, use, and Use::version. Referenced by Cmt::do_show_pattern(). |
|
| ? |
This is the cmt show pattern Definition at line 511 of file cmt_pattern.cxx. References Use::apply_patterns, Use::current(), find(), Use::get_ordered_uses(), Use::get_package_name(), ApplyPattern::name, CmtError::pattern_not_found, patterns(), CmtError::set(), ApplyPattern::show(), cmt_vector< ApplyPattern >::size(), cmt_vector< Use * >::size(), use, and Use::version. Referenced by PatternList::show_all_patterns(). 00512 {
00513 static PatternVector& Patterns = patterns ();
00514
00515 int i;
00516 int j;
00517
00518 bool found = false;
00519
00520 // First show the definitions.
00521
00522 Pattern* p = Pattern::find (name);
00523
00524 if (p == 0)
00525 {
00526 CmtError::set (CmtError::pattern_not_found, name);
00527 return;
00528 }
00529
00530 p->show ();
00531
00532 //
00533 // Then show the packages which explicitly apply the pattern.
00534 //
00535 Use* use;
00536 ApplyPattern* apply_pattern = 0;
00537
00538 Use::UsePtrVector& uses = Use::get_ordered_uses ();
00539
00540 for (i = 0; i < uses.size (); i++)
00541 {
00542 use = uses[i];
00543 for (j = 0; j < use->apply_patterns.size (); j++)
00544 {
00545 apply_pattern = &(use->apply_patterns[j]);
00546
00547 if (apply_pattern->name == name)
00548 {
00549 cout << "# applied by " << use->get_package_name () << " => " << endl;
00550 apply_pattern->show ();
00551 cout << endl;
00552 }
00553 }
00554 }
00555
00556 use = &(Use::current ());
00557 for (j = 0; j < use->apply_patterns.size (); j++)
00558 {
00559 apply_pattern = &(use->apply_patterns[j]);
00560
00561 if (apply_pattern->name == name)
00562 {
00563 cout << "# " << use->get_package_name () << " " << use->version << " applies pattern " << name;
00564 cout << " => " << endl;
00565 apply_pattern->show ();
00566 cout << endl;
00567 }
00568 }
00569 }
|
|
| ? |
this is the cmt show patterns command It just shows the pattern declarations. Definition at line 475 of file cmt_pattern.cxx. References show_all_applied_patterns(), and PatternList::show_all_patterns(). Referenced by Cmt::do_show_patterns(). 00476 {
00477 PatternList::show_all_patterns ();
00478
00479 show_all_applied_patterns ();
00480 }
|
|
| ? |
this is the cmt show applied_patterns command It just shows the pattern applications. Definition at line 486 of file cmt_pattern.cxx. References Use::apply_patterns, Use::current(), Use::get_package_name(), ApplyPattern::name, ApplyPattern::show(), cmt_vector< ApplyPattern >::size(), and use. Referenced by Cmt::do_show_applied_patterns(), and show_all(). 00487 {
00488 Use* use = &(Use::current ());
00489 for (int i = 0; i < use->apply_patterns.size (); i++)
00490 {
00491 const ApplyPattern& apply_pattern = use->apply_patterns[i];
00492
00493 cout << "# " << use->get_package_name ()
00494 << " applies pattern " << apply_pattern.name << " => " << endl;
00495 apply_pattern.show ();
00496 cout << endl;
00497 }
00498 }
|
|
| ? |
Definition at line 501 of file cmt_pattern.cxx. References PatternList::show_all_pattern_names(). Referenced by Cmt::do_show_pattern_names(). 00502 {
00503 PatternList::show_all_pattern_names ();
00504 }
|
|
| ? |
Definition at line 68 of file cmt_pattern.h. Referenced by action(), add(), ApplyPattern::apply(), PatternList::apply_all_globals(), Use::apply_global_patterns(), and clear(). |
|
| ? |
Definition at line 67 of file cmt_pattern.h. Referenced by ApplyPattern::action(), add(), clear(), expand(), and show(). |
|
| ? |
Definition at line 66 of file cmt_pattern.h. Referenced by action(), add(), apply(), PatternList::apply_all_globals(), clear(), show(), and PatternList::show_all_pattern_names(). |
|
| ? |
Definition at line 69 of file cmt_pattern.h. Referenced by add(), PatternList::add_pattern(), apply(), clear(), PatternList::find(), show(), and show_all_applied_patterns(). |