/*ident "@(#)List_old.c 1.1.2.5" */ /****************************************************************************** * * C++ Standard Components, Release 3.0. * * Copyright (c) 1991, 1992 AT&T and Unix System Laboratories, Inc. * Copyright (c) 1988, 1989, 1990 AT&T. All Rights Reserved. * * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T and Unix System * Laboratories, Inc. The copyright notice above does not evidence * any actual or intended publication of such source code. * ******************************************************************************/ #ifndef _LIST_OLD_C_ #define _LIST_OLD_C_ #include #include #ifdef __GNUG__ template Pool *lnnk_old_ATTLC::pool() { Pool *lcl_pool = 0; if (lcl_pool == 0) { lcl_pool = new Pool(sizeof(lnnk_old_ATTLC)); } return lcl_pool; } #else template Pool* lnnk_old_ATTLC::pool = 0; #endif template lnnk_old_ATTLC::~lnnk_old_ATTLC() { } template lnk_old_ATTLC* lnnk_old_ATTLC::copy() { return new lnnk_old_ATTLC((T&)val); } template int lnnk_old_ATTLC::operator==(lnk_old_ATTLC& x) { return val == ((lnnk_old_ATTLC*)&x)->val; } template void* lnnk_old_ATTLC::operator new(size_t) { #ifdef __GNUG__ return pool()->alloc(); #else return pool->alloc(); #endif } template lnk_old_ATTLC* lnnk_old_ATTLC::getnewlnnk_old_ATTLC(const T& x) { return (new lnnk_old_ATTLC((T&)x)); } template void lnnk_old_ATTLC::deletelnnk_old_ATTLC(T& t, lnnk_old_ATTLC* ptr) { t = ptr->val; delete ptr; } template List_old::List_old(const List_old& a0, const T& _t) : Lizt_old_ATTLC((Lizt_old_ATTLC&)a0) { put(_t); } template List_old::List_old() { #ifndef __GNUG__ lnnk_old_ATTLC::init_pool(); #endif } template List_old::List_old(const T& _t) { #ifndef __GNUG__ lnnk_old_ATTLC::init_pool(); #endif put(_t); } template List_old::List_old(const T& _t, const T& u) { #ifndef __GNUG__ lnnk_old_ATTLC::init_pool(); #endif put(_t); put(u); } template List_old::List_old(const T& _t, const T& u, const T& v) { #ifndef __GNUG__ lnnk_old_ATTLC::init_pool(); #endif put(_t); put(u); put(v); } template List_old::List_old(const T& _t, const T& u, const T& v, const T& w) { #ifndef __GNUG__ lnnk_old_ATTLC::init_pool(); #endif put(_t); put(u); put(v); put(w); } template List_old::List_old(const List_old& a) : Lizt_old_ATTLC((const Lizt_old_ATTLC&)a) { #ifndef __GNUG__ lnnk_old_ATTLC::init_pool(); #endif } template T List_old::unput() { lnnk_old_ATTLC* ll = (lnnk_old_ATTLC*)Lizt_old_ATTLC::unput(); T ans = ll->val; delete ll; return ans; } template T List_old::get() { lnnk_old_ATTLC* ll = (lnnk_old_ATTLC*)Lizt_old_ATTLC::get(); if (ll == 0) return T(); T ans = ll->val; delete ll; return ans; } template T& List_old::operator[](unsigned ii) { return (T&)*(getAt(ii)); } template const T& List_old::operator[](unsigned ii) const { return (const T&)*(((List_old*)this)->getAt(ii)); } template T List_old::head() const { lnnk_old_ATTLC* ll = (lnnk_old_ATTLC*)Lizt_old_ATTLC::head(); if (ll == 0) return T(); return ll->val; } template T List_old::tail() const { lnnk_old_ATTLC* ll = (lnnk_old_ATTLC*)Lizt_old_ATTLC::tail(); if (ll == 0) return T(); return ll->val; } template int List_old::find_next(const T& _t) { return ((Listiter_old*)(&myit))->find_next(_t); } template int List_old::find_prev(const T& _t) { return ((Listiter_old*)(&myit))->find_prev(_t); } template int List_old::next(T& _t) { return ((Listiter_old*)(&myit))->next(_t); } template int List_old::next(T*& _t) { return ((Listiter_old*)(&myit))->next(_t); } template T List_old::next() { return ((Listiter_old*)(&myit))->next(); } template int List_old::prev(T& _t) { return ((Listiter_old*)(&myit))->prev(_t); } template int List_old::prev(T*& _t) { return ((Listiter_old*)(&myit))->prev(_t); } template T List_old::prev() { return ((Listiter_old*)(&myit))->prev(); } template int List_old::peek_next(T& _t) const { return ((Const_listiter_old*)(&((List_old*)this)->myit))->peek_next(_t); } template int List_old::peek_next(T*& _t) const { return ((Const_listiter_old*)(&((List_old*)this)->myit))->peek_next(_t); } template T List_old::peek_next() const { return ((Const_listiter_old*)(&((List_old*)this)->myit))->peek_next(); } template int List_old::peek_prev(T& _t) const { return ((Const_listiter_old*)(&((List_old*)this)->myit))->peek_prev(_t); } template int List_old::peek_prev(T*& _t) const { return ((Const_listiter_old*)(&((List_old*)this)->myit))->peek_prev(_t); } template T List_old::peek_prev() const { return ((Const_listiter_old*)(&((List_old*)this)->myit))->peek_prev(); } template int List_old::remove_prev() { return ((Listiter_old*)(&myit))->remove_prev(); } template int List_old::remove_next() { return ((Listiter_old*)(&myit))->remove_next(); } template int List_old::remove_prev(T& _t) { return ((Listiter_old*)(&myit))->remove_prev(_t); } template int List_old::remove_next(T& _t) { return ((Listiter_old*)(&myit))->remove_next(_t); } template void List_old::sort(int (*cmp)(const T&,const T&)) { if ( length() < 2 ) return; voidP_List_old_sort_internal(*(List_old*)this, (int (*)(const voidP &, const voidP &))cmp); reset_all_iters(); } template int List_old::unput(T& _t) { lnnk_old_ATTLC* ll = (lnnk_old_ATTLC*)Lizt_old_ATTLC::unput(); if ( ll ) { lnnk_old_ATTLC::deletelnnk_old_ATTLC(_t, ll); return 1; } else return 0; } template int List_old::get(T& _t) { lnnk_old_ATTLC* ll = (lnnk_old_ATTLC*)Lizt_old_ATTLC::get(); if ( ll ) { lnnk_old_ATTLC::deletelnnk_old_ATTLC(_t, ll); return 1; } else return 0; } template int List_old::replace_prev(const T& x) { if ( at_head() ) return 0; else return (((lnnk_old_ATTLC*)Lizt_old_ATTLC::peek_prev())->val=x, 1); } template int List_old::replace_next(const T& x) { if ( at_end() ) return 0; else return (((lnnk_old_ATTLC*)Lizt_old_ATTLC::peek_next())->val=x, 1); } template List_old& List_old::put(const T& x) { return (List_old&) Lizt_old_ATTLC::put(lnnk_old_ATTLC::getnewlnnk_old_ATTLC(x)); } template List_old& List_old::unget(const T& x) { return (List_old&)Lizt_old_ATTLC::unget(lnnk_old_ATTLC::getnewlnnk_old_ATTLC(x)); } template void List_old::insert_prev(const T& x) { Lizt_old_ATTLC::insert_prev(lnnk_old_ATTLC::getnewlnnk_old_ATTLC(x)); } template void List_old::insert_next(const T& x) { Lizt_old_ATTLC::insert_next(lnnk_old_ATTLC::getnewlnnk_old_ATTLC(x)); } template T* List_old::getAt(int i) { lnnk_old_ATTLC* ll = (lnnk_old_ATTLC*)Lizt_old_ATTLC::getAt(i); if ( ll ) return &(ll->val); else return (T*)0; } template Const_listiter_old::Const_listiter_old(const List_old& a) : Liztiter_old_ATTLC((Lizt_old_ATTLC&)a) { } template Const_listiter_old::Const_listiter_old(const Const_listiter_old& a) : Liztiter_old_ATTLC((const Liztiter_old_ATTLC&)a) { } template int Const_listiter_old::next(T& t) { if ( at_end() ) return 0; else return (t = ((lnnk_old_ATTLC*)Liztiter_old_ATTLC::next())->val, 1); } template int Const_listiter_old::next(T*& t) { if ( at_end() ) return 0; else return (t = &((lnnk_old_ATTLC*)Liztiter_old_ATTLC::next())->val, 1); } template T Const_listiter_old::next() { // if ( at_end() ) // return 0; lnnk_old_ATTLC* ll = (lnnk_old_ATTLC*)Liztiter_old_ATTLC::next(); return ll->val; } template int Const_listiter_old::prev(T& t) { if ( at_head() ) return 0; else return (t=((lnnk_old_ATTLC*)Liztiter_old_ATTLC::prev())->val, 1); } template int Const_listiter_old::prev(T*& t) { if ( at_head() ) return 0; else return (t= &((lnnk_old_ATTLC*)Liztiter_old_ATTLC::prev())->val, 1); } template T Const_listiter_old::prev() { // if ( at_head() ) // return 0; lnnk_old_ATTLC* ll = (lnnk_old_ATTLC*)Liztiter_old_ATTLC::prev(); return ll->val; } template int Const_listiter_old::find_prev(const T& x) { if ( at_head() || theLizt->length()==0 ) return 0; lnnk_old_ATTLC* iter = (lnnk_old_ATTLC*) pred->nxt; register int i = index; do { iter = (lnnk_old_ATTLC*) iter->prv; if (iter->val==x) { index = i; pred = iter; return 1; } i--; } while ( i > 0 ); return 0; } template int Const_listiter_old::find_next(const T& x) { if ( at_end() || theLizt->length()==0 ) return 0; lnnk_old_ATTLC* iter = (lnnk_old_ATTLC*) pred; register int i = index; do { iter = (lnnk_old_ATTLC*) iter->nxt; if (iter->val==x) { index = i; pred = iter->prv; return 1; } i++; } while ( i < theLizt->length() ); return 0; } template T Const_listiter_old::peek_prev() const { if ( at_head() ) return T(); return ((lnnk_old_ATTLC*)Liztiter_old_ATTLC::peek_prev())->val; } template int Const_listiter_old::peek_prev(T& t) const { if ( at_head() ) return 0; else return (t = ((lnnk_old_ATTLC*)Liztiter_old_ATTLC::peek_prev())->val, 1); } template int Const_listiter_old::peek_prev(T*& t) const { if ( at_head() ) return 0; else return (t = &((lnnk_old_ATTLC*)Liztiter_old_ATTLC::peek_prev())->val, 1); } template T Const_listiter_old::peek_next() const { if ( at_end() ) return T(); return ((lnnk_old_ATTLC*)Liztiter_old_ATTLC::peek_next())->val; } template int Const_listiter_old::peek_next(T& t) const { if ( at_end() ) return 0; else return (t = ((lnnk_old_ATTLC*)Liztiter_old_ATTLC::peek_next())->val, 1); } template int Const_listiter_old::peek_next(T*& t) const { if ( at_end() ) return 0; else return (t = &((lnnk_old_ATTLC*)Liztiter_old_ATTLC::peek_next())->val, 1); } template T* Const_listiter_old::getAt(int i) { lnnk_old_ATTLC* ll = ((lnnk_old_ATTLC*)Liztiter_old_ATTLC::getAt(i)); if ( ll ) return &(ll->val); else return (T*)0; } template Listiter_old::Listiter_old(List_old& a) : Const_listiter_old((const List_old&)a) { } template Listiter_old::Listiter_old(const Listiter_old& a) : Const_listiter_old((Const_listiter_old)a) { } template int Listiter_old::remove_prev() { lnnk_old_ATTLC *aLink = (lnnk_old_ATTLC *)Liztiter_old_ATTLC::remove_prev(); if ( aLink ) { delete aLink; return 1; } else return 0; } template int Listiter_old::remove_prev(T &x) { lnnk_old_ATTLC *aLink = (lnnk_old_ATTLC *)Liztiter_old_ATTLC::remove_prev(); if ( aLink ) { x = aLink->val; delete aLink; return 1; } else return 0; } template int Listiter_old::remove_next() { lnnk_old_ATTLC *aLink = (lnnk_old_ATTLC *)Liztiter_old_ATTLC::remove_next(); if ( aLink ) { delete aLink; return 1; } else return 0; } template int Listiter_old::remove_next(T &x) { lnnk_old_ATTLC *aLink = (lnnk_old_ATTLC *)Liztiter_old_ATTLC::remove_next(); if ( aLink ) { x = aLink->val; delete aLink; return 1; } else return 0; } template int Listiter_old::replace_prev(const T& x) { if ( at_head() ) return 0; else return (((lnnk_old_ATTLC*)Liztiter_old_ATTLC::peek_prev())->val=x,1); } template int Listiter_old::replace_next(const T& x) { if ( at_end() ) return 0; else return (((lnnk_old_ATTLC*)Liztiter_old_ATTLC::peek_next())->val=x,1); } template void Listiter_old::insert_prev(const T& x) { Liztiter_old_ATTLC::insert_prev(lnnk_old_ATTLC::getnewlnnk_old_ATTLC(x)); } template void Listiter_old::insert_next(const T& x) { Liztiter_old_ATTLC::insert_next(lnnk_old_ATTLC::getnewlnnk_old_ATTLC(x)); } template List_of_piter_old::List_of_piter_old(List_of_p_old& l) : Const_list_of_piter_old((const List_of_p_old&)l) { } template List_of_piter_old::List_of_piter_old(const List_of_piter_old& l) : Const_list_of_piter_old((Const_list_of_piter_old)l) { } template List_of_piter_old::~List_of_piter_old() { } template List_of_p_old::List_of_p_old(const T* x) : List_old((voidP) x) { } template List_of_p_old::List_of_p_old(const T* x, const T* y) : List_old((voidP) x, (voidP) y) { } template List_of_p_old::List_of_p_old(const T* x, const T* y, const T* z) : List_old((voidP)x, (voidP)y, (voidP)z) { } template List_of_p_old::List_of_p_old(const T* x, const T* y, const T* z, const T* w) : List_old((voidP) x, (voidP) y, (voidP) z, (voidP) w) { } template Const_list_of_piter_old::Const_list_of_piter_old(const List_of_p_old& l) : Listiter_old((List_old&) l) { } template Const_list_of_piter_old::Const_list_of_piter_old(const Const_list_of_piter_old& l) : Listiter_old((Listiter_old&) l) { } template List_of_p_old List_of_p_old::operator+(const List_of_p_old& ll) { List_old result((List_old&)*this + (List_old&)ll); return (List_of_p_old&)result; } template List_of_p_old List_of_p_old::operator+(const T* _t) { List_old result((List_old&)*this + (voidP)_t); return (List_of_p_old&)result; } template T*& List_of_p_old::operator[](unsigned ii) { return (T*&)*getAt(ii); } template const T*& List_of_p_old::operator[](unsigned ii) const { return (const T*&)*((List_of_p_old*)this)->getAt(ii); } template ostream& operator<<(ostream& oo, const List_old& ll) { int first = 1; oo << "( "; Const_listiter_old l(ll); while (!l.at_end()) { if (!first) oo << ", "; first = 0; oo << l.next(); } oo << " )"; return oo; } template ostream& List_old::print(ostream& oo) const { int first = 1; oo << "( "; Const_listiter_old l(*this); while (!l.at_end()) { if (!first) oo << ", "; first = 0; oo << l.next(); } oo << " )"; return oo; } template ostream& operator<<(ostream& oo, const List_of_p_old& ll) { int first = 1; oo << "( "; Const_list_of_piter_old l(ll); while (!l.at_end()) { if (!first) oo << ", "; first = 0; oo << *(l.next()); } oo << " )"; return oo; } template ostream& List_of_p_old::print(ostream& oo) const { int first = 1; oo << "( "; Const_list_of_piter_old l(*this); while (!l.at_end()) { if (!first) oo << ", "; first = 0; oo << *(l.next()); } oo << " )"; return oo; } #endif