fix TRACK::Copy() usage

This commit is contained in:
dickelbeck 2007-09-11 04:14:15 +00:00
parent 4173f9b9c8
commit fe13569b11
1 changed files with 17 additions and 13 deletions

View File

@ -66,14 +66,12 @@ TRACK::TRACK( const TRACK& Source ) :
} }
/* Because of the way SEGVIA is derived from TRACK and because there are /* Because of the way SEGVIA and SEGZONE are derived from TRACK and because there are
virtual functions being used, we can no longer simply copy a TRACK and virtual functions being used, we can no longer simply copy a TRACK and
expect it to be a via. We must construct a true SEGVIA so its constructor expect it to be a via or zone. We must construct a true SEGVIA or SEGZONE so its constructor
can initialize the virtual function table properly. So this constructor can initialize the virtual function table properly. This factory type of
is being retired in favor of a factory type function called Copy() function called Copy() can duplicate either a TRACK, SEGVIA, or SEGZONE.
which can duplicate either a TRACK or a SEGVIA.
*/ */
TRACK* TRACK::Copy() const TRACK* TRACK::Copy() const
{ {
if( Type() == TYPETRACK ) if( Type() == TYPETRACK )
@ -82,6 +80,9 @@ TRACK* TRACK::Copy() const
if( Type() == TYPEVIA ) if( Type() == TYPEVIA )
return new SEGVIA( (const SEGVIA&) *this ); return new SEGVIA( (const SEGVIA&) *this );
if( Type() == TYPEZONE )
return new SEGZONE( (const SEGZONE&) *this );
return NULL; // should never happen return NULL; // should never happen
} }
@ -458,21 +459,23 @@ TRACK* TRACK::GetEndNetCode( int NetCode )
} }
#if 0
/**********************************/ /**********************************/
TRACK* TRACK:: Copy( int NbSegm ) TRACK* TRACK:: CopyList( int NbSegm ) const
/**********************************/ /**********************************/
/* Copie d'un Element ou d'une chaine de n elements /* Copie d'un Element ou d'une chaine de n elements
* Retourne un pointeur sur le nouvel element ou le debut de la * Retourne un pointeur sur le nouvel element ou le debut de la
* nouvelle chaine * nouvelle chaine
*/ */
{ {
TRACK* NewTrack, * FirstTrack, * OldTrack, * Source = this; TRACK* NewTrack;
int ii; TRACK* FirstTrack;
TRACK* OldTrack;
const TRACK* Source = this;
FirstTrack = NewTrack = new TRACK( *Source ); FirstTrack = NewTrack = Source->Copy();
for( ii = 1; ii < NbSegm; ii++ ) for( int ii = 1; ii < NbSegm; ii++ )
{ {
Source = Source->Next(); Source = Source->Next();
if( Source == NULL ) if( Source == NULL )
@ -487,6 +490,7 @@ TRACK* TRACK:: Copy( int NbSegm )
return FirstTrack; return FirstTrack;
} }
#endif
/********************************************/ /********************************************/