home *** CD-ROM | disk | FTP | other *** search
- "======================================================================
- |
- | MappedCollection Method Definitions
- |
- ======================================================================"
-
-
- "======================================================================
- |
- | Copyright (C) 1990, 1991 Free Software Foundation, Inc.
- | Written by Steve Byrne.
- |
- | This file is part of GNU Smalltalk.
- |
- | GNU Smalltalk is free software; you can redistribute it and/or modify it
- | under the terms of the GNU General Public License as published by the Free
- | Software Foundation; either version 1, or (at your option) any later version.
- |
- | GNU Smalltalk 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 General Public License for more
- | details.
- |
- | You should have received a copy of the GNU General Public License along with
- | GNU Smalltalk; see the file COPYING. If not, write to the Free Software
- | Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- |
- ======================================================================"
-
-
- "
- | Change Log
- | ============================================================================
- | Author Date Change
- | sbyrne 25 Apr 89 created.
- |
- "
-
- Collection subclass: #MappedCollection
- instanceVariableNames: 'domain map'
- classVariableNames: ''
- poolDictionaries: ''
- category: nil.
-
- MappedCollection comment:
- 'I represent collections of objects that are indirectly indexed by names.
- There are really two collections involved: domain and a map. The map maps
- between external names and indices into domain, which contains the
- real association. In order to work properly, the domain and map objects must
- be instances of a subclass of SequenceableCollection or Dictionary. ' !
-
- !MappedCollection class methodsFor: 'basic'!
-
- collection: aCollection map: aMap
- ^self new setCollection: aCollection andMap: aMap
- !
-
- new
- self error: 'new not available for MappedCollections; use collection:map:'
- !!
-
-
- !MappedCollection methodsFor: 'basic'!
-
- at: key
- ^domain at: (map at: key)
- !
-
- at: key put: value
- ^domain at: (map at: key) put: value
- !
-
- contents
- | contents |
- contents _ Bag new.
- map do: [ :domainKey | contents add: domain at: domainKey ].
- ^contents
- !
-
- size
- ^domain size
- !
-
- add: anObject
- self shouldNotImplement
- !
-
- contents
- | aBag |
- aBag _ Bag new.
- map do: [ :value | aBag add: (domain at: value) ].
- ^aBag
- !
-
- do: aBlock
- map do: [ :value | aBlock value: (domain at: value) ]
- !
-
- collect: aBlock
- | aStream |
- aStream _ WriteStream on: (self species new: self size).
- self do: [ :value | aStream nextPut: (aBlock value: value) ].
- ^aStream contents
- !
-
- select: aBlock
- | aStream |
- aStream _ WriteStream on: (self species new: self size).
- self do: [ :value | (aBlock value: value) ifTrue:
- [ aStream nextPut: value ] ].
- ^aStream contents
- !!
-
-
-
- !MappedCollection methodsFor: 'private'!
-
- setCollection: aCollection andMap: aMap
- domain _ aCollection.
- map _ aMap
- !
-
- species
- ^domain species
- !!
-