/***************************************************************************/ // "Меркурий"-"Правда" - open source переводчик // распространяется в соответсвии с лицензией GNU v 2.0 // // Массив, которому можно дописывать в конец // Анисимов Д.В. сегодня /***************************************************************************/ # ifndef LIST_HPP # define LIST_HPP void list_error( void ); # define DECLARE_LIST_TYPE( t,t1 ) \ \ class t1 \ { \ public: \ long j,n ; \ t *list ; \ \ t1( void ); \ ~t1( void ); \ long size( void ); \ void operator = ( t1 &a ); \ t & operator []( long i ); \ long add( t &v ); \ void resize( void ); \ void init( void ); \ void del( void ); \ } ; # define COMMON_FUNKTION( t,t1 ) \ \ t1 :: t1( void ) \ { init(); } \ \ void t1 :: init( void ) \ { \ j=n=0 ; \ list=NULL ; \ } \ \ t1 :: ~t1( void ) \ { \ del(); \ } \ \ long t1 :: size ( void ) \ { \ return n*sizeof(t1); \ } \ \ void t1 :: operator = ( t1 &a ) \ { \ if( a.j>a.n || a.n>0 && a.list==NULL ) \ { printf("\n Incorrect data in operator =" ); \ throw( a ) ; \ } \ if( this==&a ) return ; \ del(); \ /* if( list!=NULL ) free( list ); */ \ j=a.j ; \ n=a.n ; \ if( a.list==NULL ){ list=NULL ; return ; } \ list=(t *)calloc(n,sizeof(t)); \ if( list==NULL ) throw( (char )-1 ); \ for( long i=0 ; i=n ) \ { n=n+n/4 ; \ list1=(t *)realloc( list,n*sizeof(t) ); \ if( list1==NULL ) throw( (char )-1 ); \ list=list1 ; \ for( i=j ; i=n ) \ { n=n+n/4 ; \ list1=(t *)realloc( list,n*sizeof(t) ); \ if( list1==NULL ) throw( (char )-1 ); \ list=list1 ; \ } \ list[j++]=v ; \ return j-1 ; \ } \ # endif