eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'MethodDictionary':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: MethodDictionary


Inheritance:

   Object
   |
   +--Collection
      |
      +--KeyedCollection
         |
         +--MethodDictionary

Package:
stx:libbasic
Category:
Kernel-Methods
Version:
rev: 1.41 date: 2019/07/27 23:00:14
user: cg
file: MethodDictionary.st directory: libbasic
module: stx stc-classLibrary: libbasic
Author:
Stefan Vogel

Description:


Instances of MethodDictionary store selector/method associations
in classes. Conceptionally, they behave like IdentityDictionaries, but are
implemented using a single array (instead of Dictionary, which uses
two arrays to store keys and values separately).
Also, they do not use hashing, since due to caching in the VM, hashing
does not make too much of a difference in speed, but complicates the 
VM implementation.


Related information:

    Dictionary
    IdentityDictionary
    Behavior
    Class
    Method
    Symbol

Class protocol:

instance creation
o  new
create and return an empty methodDictionary.
Because mDicts cannot grow, we return a singleton
(if any selectors are added later, a new instance
will be created anyway).
Using a singleton will speed up dynamic creation of
new classes which will be filled in later

o  new: sz
create and return a new methodDictionary holding sz
key->value associations

o  newWithCapacity: size
return a new empty Collection with capacity for n elements.

o  withAll: aDictionary
create a MethodDictionary from another Dictionary

o  withKeys: keys andValues: values
create a MethodDictionary from a key (selector) array and value (method) array

queries
o  isBuiltInClass
this class is known by the run-time-system


Instance protocol:

accessing
o  at: key ifAbsent: exceptionBlock
return the element indexed by aKey -
return result of exceptionBlock if no element is stored under aKey

o  at: key put: value
set the value for a given key, which is supposed to be a symbol.
In contrast to dictionaries, we allow adding elements only, if there is an
empty slot (nil key) present.

o  at: key putOrAppend: value
set the value for a given key, which is supposed to be a symbol.
In contrast to dictionaries, we allow adding elements only, if there is an
empty slot (nil key) present.
Otherwise a new MethodDictionary is created & returned

o  keyAtIdenticalValue: value ifAbsent: exceptionBlock
return the first key with value -
return result of exceptionBlock if no key can be found.
This is a slow access, since the receiver is searched sequentially.
NOTICE:
The value is searched using identity compare

o  keyAtValue: value
return the key under which value is stored.
Raise an error if not found.
This is a slow access, since the receiver is searched sequentially.
NOTICE:
The value is searched using identity compare.
use #keyAtEqualValue:ifAbsent: to compare for equality.

o  keyAtValue: value ifAbsent: exceptionBlock
return the key under which value is stored.
If not found, return the value from evaluating exceptionBlock.
This is a slow access, since the receiver is searched sequentially.
NOTICE:
The value is searched using identity compare;
use #keyAtEqualValue:ifAbsent: to compare for equality.

enumerating
o  do: aBlock
evaluate aBlock for each value (i.e. each method)

o  keysAndValuesDo: aBlock
evaluate the 2 arg block aBlock for each key (i.e. each selector)
and each value (i.e. each method)

o  keysDo: aBlock
evaluate aBlock for each key (i.e. each selector)

private
o  atIndex: idx putKey: key andValue: value
set the key, which is supposed to be a symbol,
and the value at idx.
Only use this to initialize a methodDictionary fast,
when the set of methods is known beforehand
(avoids search for nil slots)

o  compressed
compress - return either the myself or a new, compressed MethodDictionary

queries
o  size
return the number of elements (associations) in the receiver

o  speciesForCollecting
(comment from inherited method)
like species, but used when doing collect operations.
Redefined for collections which return a different classes object when doing collect.

removing
o  removeKey: key ifAbsent: failBlock
remove key from dictionary,
return the value previously stored there.
If it was not in the collection return the result
from evaluating failBlock.
We actually do not remove it, but set it to nil.

o  removeKeyAndCompress: key
remove key from dictionary.
A new, compressed MethodDictionary will be returned,
or nil, if key is not present.



ST/X 7.2.0.0; WebServer 1.670 at bd0aa1f87cdd.unknown:8081; Wed, 24 Apr 2024 19:45:07 GMT