"====================================================================== | | Link Method Definitions | | $Revision: 1.7.5$ | $Date: 2000/05/28 16:56:52$ | $Author: pb$ | ======================================================================" "====================================================================== | | Copyright 1988-92, 1994-95, 1999, 2000 Free Software Foundation, Inc. | Written by Steve Byrne. | | This file is part of the GNU Smalltalk class library. | | The GNU Smalltalk class library is free software; you can redistribute it | and/or modify it under the terms of the GNU Lesser General Public License | as published by the Free Software Foundation; either version 2.1, or (at | your option) any later version. | | The GNU Smalltalk class library is distributed in the hope that it will be | useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser | General Public License for more details. | | You should have received a copy of the GNU Lesser General Public License | along with the GNU Smalltalk class library; see the file COPYING.LESSER. | If not, write to the Free Software Foundation, 59 Temple Place - Suite | 330, Boston, MA 02111-1307, USA. | ======================================================================" Object subclass: #Link instanceVariableNames: 'nextLink' classVariableNames: '' poolDictionaries: '' category: 'Collections-Sequenceable' ! Link comment: 'I represent simple linked lists. Generally, I am not used by myself, but rather a subclass adds other instance variables that hold the information for each node, and I hold the glue that keeps them together.' ! !Link class methodsFor: 'instance creation'! nextLink: aLink "Create an instance with the given next link" ^self new nextLink: aLink ! ! !Link methodsFor: 'iteration'! at: index "Retrieve a node (instance of Link) that is at a distance of `index' after the receiver." | i element | i := 1. element := self. [ i = index ifTrue: [ ^element ]. i := i + 1. (element := element nextLink) isNil ] whileFalse. ^self error: 'index out of bounds in linked list' ! at: index put: object self shouldNotImplement ! do: aBlock "Evaluate aBlock for each element in the list" | item | item := self. [ aBlock value: item. (item := item nextLink) isNil ] whileFalse ! size "Answer the number of elements in the list. Warning: this is O(n)" | item count | item := self. count := 1. [ (item := item nextLink) isNil ] whileFalse: [ count := count + 1 ]. ! ! !Link methodsFor: 'basic'! nextLink "Answer the next item in the list" ^nextLink ! nextLink: aLink "Set the next item in the list" nextLink := aLink. ^aLink ! !