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

BestFitNoCheckSelector Class Reference

Inheritance diagram for BestFitNoCheckSelector

[legend]
Collaboration diagram for BestFitNoCheckSelector:

[legend]
List of all members.

Public Methods

Use*? operate (Use* ref_use, Use* new_use)

Member Function Documentation

Use * BestFitNoCheckSelector::operate ( Use * ref_use,
Use * new_use?) [virtual]
?

Reimplemented from VersionSelector.

Definition at line 3527 of file cmt_use.cxx.

03528 {
03529   Use* selected = ref_use;
03530 
03531   int old_v = -1;
03532   int old_r = -1;
03533   int old_p = -1;
03534   cmt_string old_pp;
03535 
03536   int new_v = -1;
03537   int new_r = -1;
03538   int new_p = -1;
03539   cmt_string new_pp;
03540 
03541   int alias_v = -1;
03542   int alias_r = -1;
03543   int alias_p = -1;
03544   cmt_string alias_pp;
03545 
03546   enum { no_alias, new_has_alias, ref_has_alias } has_alias = no_alias;
03547 
03548   CmtSystem::is_version_directory (ref_use->version, old_v, old_r, old_p);
03549   old_pp = ref_use->path;
03550 
03551   CmtSystem::is_version_directory (new_use->version, new_v, new_r, new_p);
03552   new_pp = new_use->path;
03553 
03554   if (new_use->version_alias != "")
03555     {
03556       has_alias = new_has_alias;
03557       CmtSystem::is_version_directory (new_use->version_alias, 
03558                                        alias_v, alias_r, alias_p);
03559       alias_pp = new_use->path_alias;
03560     }
03561   else if (ref_use->version_alias != "")
03562     {
03563       has_alias = ref_has_alias;
03564       CmtSystem::is_version_directory (ref_use->version_alias, 
03565                                        alias_v, alias_r, alias_p);
03566       alias_pp = ref_use->path_alias;
03567     }
03568 
03569   ref_use->undiscard ();
03570   new_use->undiscard ();
03571 
03572   if (new_v != old_v)
03573     {
03574       if (has_alias != no_alias)
03575         {
03576           if (has_alias == new_has_alias)
03577             {
03578               new_v = alias_v;
03579               new_r = alias_r;
03580               new_p = alias_p;
03581               new_pp = alias_pp;
03582             }
03583           else if (has_alias == ref_has_alias)
03584             {
03585               old_v = alias_v;
03586               old_r = alias_r;
03587               old_p = alias_p;
03588               old_pp = alias_pp;
03589             }
03590         }
03591     }
03592 
03593   if (new_v < old_v)
03594     {
03595       if (!Cmt::get_quiet ())
03596         {
03597           cout << "# Keep version " << ref_use->version <<
03598             " of package " << ref_use->get_package_name () <<
03599             " (ignore version " << new_use->version << ")" <<
03600             endl;
03601         }
03602 
03603       if (ref_use != new_use) new_use->discard ();
03604     }
03605   else if (new_v > old_v)
03606     {
03607       if (!Cmt::get_quiet ())
03608         {
03609           cout << "# Select version " << new_use->version <<
03610             " of package " << ref_use->get_package_name () <<
03611             " instead of existing " << ref_use->version <<
03612             endl;
03613         }
03614 
03615       if (ref_use != new_use) ref_use->discard ();
03616       selected = new_use;
03617       selected->done = false; // Will read the new requirements
03618     }
03619   else if (new_r < old_r)
03620     {
03621       if (!Cmt::get_quiet ())
03622         {
03623           cout << "# keep release " << ref_use->version <<
03624             " of package " << ref_use->get_package_name () <<
03625             " (ignore release " << new_use->version << ")" <<
03626             endl;
03627         }
03628 
03629       if (ref_use != new_use) new_use->discard ();
03630     }
03631   else if (new_r > old_r)
03632     {
03633       if (!Cmt::get_quiet ())
03634         {
03635           cout << "# Select release " << new_use->version <<
03636             " of package " << ref_use->get_package_name () <<
03637             " instead of existing " << ref_use->version <<
03638             endl;
03639         }
03640 
03641       if (ref_use != new_use) ref_use->discard ();
03642       selected = new_use;
03643       selected->done = false; // Will read the new requirements
03644     }
03645   else if (new_p > old_p)
03646     {
03647       if (!Cmt::get_quiet ())
03648         {
03649           cout << "# Select patch " << new_use->version <<
03650             " of package " << ref_use->get_package_name () <<
03651             " instead of existing " << ref_use->version <<
03652             endl;
03653         }
03654 
03655       if (ref_use != new_use) ref_use->discard ();
03656       selected = new_use;
03657       selected->done = false; // Will read the new requirements
03658     }
03659   else if (new_pp != old_pp) // same version-r-p but from different path
03660     {
03661       if (ref_use != new_use) ref_use->discard ();
03662       selected = new_use;
03663       selected->done = false; // Will read the new requirements
03664     }
03665 
03666   return (selected);
03667 }

The documentation for this class was generated from the following file:
Generated at Mon Aug 11 12:55:54 2003 for CMT by 1.2.3 written by , ??1997-2000