org.abora.gold.collection.tables
Class MuTable

java.lang.Object
  |
  +--org.abora.gold.java.AboraHeaper
        |
        +--org.abora.gold.xpp.basic.Heaper
              |
              +--org.abora.gold.collection.tables.ScruTable
                    |
                    +--org.abora.gold.collection.tables.MuTable
Direct Known Subclasses:
GrandHashTable, HashTable, IntegerTable

public class MuTable
extends ScruTable

MuTable represents the base class for all side-effectable tables. It provides the basic
change protocol for tables. See MuSet.


Field Summary
protected static Signal AlreadyInTableSignal
           
protected static Signal NotInDomainSignal
           
protected static Signal NullInsertionSignal
           
 
Fields inherited from class org.abora.gold.collection.tables.ScruTable
NotInTableSignal, WrongCoordSpaceSignal
 
Fields inherited from class org.abora.gold.xpp.basic.Heaper
AllBlasts, BecomeMap, GarbageCount, InGC, InitializedClasses, InitializingClasses, LastMemory, NextClientRequestNumber, NotOneElementSignal, PackageTable, PromiseNameTable, StringHashSBoxes
 
Fields inherited from class org.abora.gold.java.AboraHeaper
ActiveClubs, CurrentAuthor, CurrentBertCanopyCache, CurrentBertCrum, CurrentChunk, CurrentGrandMap, CurrentKeyMaster, CurrentPacker, CurrentSensorCanopyCache, CurrentServer, CurrentSession, CurrentSessions, CurrentTrace, InitialEditClub, InitialOwner, InitialReadClub, InitialSponsor, InsideTransactionFlag
 
Constructor Summary
MuTable()
          Create a new table with an unspecified number of initial domain positions.
MuTable(Rcvr receiver)
           
 
Method Summary
 int actualHashForEqual()
          See ScruTable::isEqual
 ImmuTable asImmuTable()
          Return a side-effect-free snapshot of my current contents.
See ScruSet::asImmuSet.
 MuTable asMuTable()
          Note that muTable->asMuTable() returns a copy of the original.
 void atIntIntroduce(IntegerVar key, Heaper value)
          Unboxed version.
 void atIntReplace(IntegerVar key, Heaper value)
          Unboxed version.
 void atIntroduce(Position key, Heaper value)
          Associate key with value unless key is already associated with another value.
 Heaper atIntStore(IntegerVar aKey, Heaper anObject)
          Unboxed version.
 void atReplace(Position key, Heaper value)
          Associate key with value only if key is already associated with a value.
 Heaper atStore(Position key, Heaper value)
          Associate value with key, whether or not there is a previous association.
Return the old range element if the position was previously occupied, NULL otherwise
 CoordinateSpace coordinateSpace()
          The kind of elements used to index into the table are Positions of this
coordinate space.
 ScruTable copy()
          A new one whose initial state is my current state, but that doesn't track
changes.
 IntegerVar count()
          Return the number of domain elements, which is to say, the number of associations.
'table->count()' should be equivalent to 'table->domain()->count()'.
Used to say: 'Return the number of range elements'.
 XnRegion domain()
          Return an XuRegion representing a snapshot of the current domain.
'table->domain()->hasMember(p)' iff 'table->fetch(p) !!= NULL'.
 ScruTable emptySize(IntegerVar size)
          Return an empty table just like the current one.
 Heaper fetch(Position key)
          Return the range element at the domain position key.
 boolean includesIntKey(IntegerVar aKey)
          Unboxed version.
 boolean includesKey(Position aKey)
          includesKey is used to test for the presence of a key->value pair in the
table.
static void initTimeNonInherited()
           
 Heaper intFetch(IntegerVar key)
          Unboxed version.
 void intRemove(IntegerVar anIdx)
          Unboxed version.
 void introduceAll(ScruTable other)
           
 void introduceAll(ScruTable table, Dsp dsp)
           
 void introduceAll(ScruTable table, Dsp dsp, XnRegion region)
          'MuTable::introduceAll is to 'MuTable::introduce' as 'MuTable::storeAll' is to
'MuTable::store'.
 boolean intWipe(IntegerVar anIdx)
          Unboxed version.
 boolean isEmpty()
          Is there anything in the table?
'table->isEmpty()' iff 'table->domain()->isEmpty()'.
 boolean isEqual(java.lang.Object other)
           
static Heaper make(CoordinateSpace cs)
          A new empty MuTable whose domain space is 'cs'.
static Heaper make(CoordinateSpace cs, XnRegion reg)
          Semantically identical to 'muTable(cs)'.
static void problems()
          A ProblemList for all X++ BLASTs
 void remove(Position anIdx)
          Remove a key->value association from the table.
Blast if the key is not present.
 void removeAll(XnRegion region)
           
 void replaceAll(ScruTable other)
           
 void replaceAll(ScruTable other, Dsp dsp)
           
 void replaceAll(ScruTable table, Dsp dsp, XnRegion region)
          'MuTable::replaceAll is to 'MuTable::replace' as 'MuTable::storeAll' is to
'MuTable::store'.
 XnRegion runAt(Position key)
          Return the length of the run starting at position key.
 XnRegion runAtInt(IntegerVar index)
          Unboxed version.
 void sendSelfTo(Xmtr xmtr)
          do nothing
 TableStepper stepper(OrderSpec order)
          Return a TableStepper which will enumerate my key->value mappings.
 void storeAll(ScruTable other)
           
 void storeAll(ScruTable table, Dsp dsp)
           
 void storeAll(ScruTable table, Dsp dsp, XnRegion region)
          I 'store' into myself (see MuTable::store) all the associations from 'table'.
If 'region' is provided, then I only store those associations from 'table' whose
key is inside 'region'.
 ScruTable subTable(XnRegion reg)
          Return a table which contains only the intersection of this table's domain and
the domain specified by 'region'.
table->subTable(r)->domain()->isEqual( table->domain()->intersect(r) ).
It is unspecified whether the resulting table starts as a snapshot of a subset of
me, after which we go our own ways; or whether the resulting table is a view
onto a subset of me, such that changes to me are also visible to him.
static void test()
          Table test
 boolean wipe(Position anIdx)
          Remove a key->value association from the table.
Do not blast (or do anything else) if the key is not in my current domain.
Return TRUE if the association was present and removed,
Return FALSE if the association was not there
 void wipeAll(XnRegion region)
          I 'wipe' from myself all associations whose key is in 'region'.
 
Methods inherited from class org.abora.gold.collection.tables.ScruTable
asOrderedCollection, backfollowFrom, contentsEqual, contentsHash, dox, get, intGet, isEqual, printOn, printOnWithSimpleSyntax, printOnWithSyntax, range, stepper, theOne, transformedBy
 
Methods inherited from class org.abora.gold.xpp.basic.Heaper
abstractDeclarationFor, abstractTypeFor, addMethodAttributeToInOf, addPackage, addPackageCategory, allClientProtocolOn, argumentTypesFor, arrow, blast, blast, BLAST, cachePromiseNameTable, cachePromiseNameTableIn, canYouBecome, cast, cleanPromiseClasses, cleanupGarbage, clientClassesDo, clientFunctionsOn, clientMethodsOn, clientProtocol, clientProtocolDo, clientProtocolOn, clientProtocolOn, collectibleClasses, compare, compileClientSubclasses, compileConstantPromiseMethods, compileCreateFromRcvr, compileEQ, compileGeneratedClassMethod, compileGeneratedMethod, compileHook, compilePromise, compilePromiseDefaultMethods, compilePromiseFluidDeclarations, compilePromiseHandlers, compilePromiseMethods, compileRequestCreateMsgInArguments, compileRequestEvaluateMsgInReturningArguments, compileRPCSpecialistEvaluateMsgForReturningArguments, compileSendSelfTo, compileSendSelfToSendHook, compileStubbleMethods, compileSubclassStubbleMethods, computeMangle, computePreorder, constantTypeValue, convert, convertCopyDeclarations, convertDeferredDeclarations, convertProxyDeclarations, convertSubclassCopyDeclarations, convertSubclassDeferredDeclarations, convertSubclassProxyDeclarations, copyReferencesToType, create, create, create, create, create, create, create, create, create, create, createRequestClassArguments, definesProxyMethods, delete, deref, destroy, destruct, destructor, enum, enumFlags, equals, exportName, fetchAttribute, fetchPackage, fetchSuperCategory, fileOutClientProtocol, findCategory, findSenderAndReceiverMethods, findTailInto, flushPromiseNameTable, foo, freezeClientClasses, freezeClientProtocol, freezeStProtocol, frozenClasses, garbageCollect, garbageCollectFrom, gcOpportunity, gcOpportunity, generatedCategory, generatePromiseNames, getCategory, getOrMakePackage, getSuperCategory, handlerSignaturesFrom, hash, hashForEqual, hasProxyMethods, info_clientClasses, info_clientSideClasses, info_promiseClasses, info_stProtocol, inGC, initializedClasses, initializingClasses, initPackages, initStringHashSBoxes, inspectPieces, instanceSize, IntegerVar, isByProxy, isConstructed, isDestructed, isEqualOrSubclassOf, isGenerated, isIntType, isKindOf, isRawType, isUnlocked, linkTimeNonInherited, make, makeClassTable, makeFillTable, makeRequestTable, mangle, markChildren, markCount, markInstances, mayBecome, mayBecomeAnySubclassOf, new1, newX, nonCopyVariables, notWorking, pack, packageClasses, packagingCategory, parseExportName, passe, pointerToStaticMember, pointerToStaticMember, pointerToVirtualMember, preorderMax, preorderNumber, PROBLEM, promiseClass, promiseDefaultValue, promiseName, promiseNameTable, promiseToAbstract, registerPackageCategory, removeGeneratedCode, removeStubbleMethods, removeSubclassGeneratedCode, removeSubclassStubbleMethods, requestProcedure, requestProceduresFrom, returnTypeFor, rootName, scheduleTermination, sendProxyTo, serverNameFor, setGC, signal, signals, smalltalkSelector, stClientProtocol, stubbleSelectorTokenReturnsArguments, subclassNonCopyVariables, takeOop, togglePromiseName, togglePromiseOfParse, unimplemented, unmangle, verifyFreeze, wipeStubble
 
Methods inherited from class org.abora.gold.java.AboraHeaper
asOop, basicInspect, displayString, error, hack, halt, inspect, knownBug, mightNotImplement, REQUIRES, shouldImplement, shouldNotImplement, stubbleForSubclassResponsibility, thingToDo, willNotImplement
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

AlreadyInTableSignal

protected static Signal AlreadyInTableSignal

NotInDomainSignal

protected static Signal NotInDomainSignal

NullInsertionSignal

protected static Signal NullInsertionSignal
Constructor Detail

MuTable

public MuTable()
Create a new table with an unspecified number of initial domain positions.


MuTable

public MuTable(Rcvr receiver)
Method Detail

atIntroduce

public void atIntroduce(Position key,
                        Heaper value)
Associate key with value unless key is already associated with another value. If so,
blast.


atReplace

public void atReplace(Position key,
                      Heaper value)
Associate key with value only if key is already associated with a value. Otherwise blast.


atStore

public Heaper atStore(Position key,
                      Heaper value)
Associate value with key, whether or not there is a previous association.
Return the old range element if the position was previously occupied, NULL otherwise


coordinateSpace

public CoordinateSpace coordinateSpace()
Description copied from class: ScruTable
The kind of elements used to index into the table are Positions of this
coordinate space. Therefore, the domain of this table is an XuRegion in this
coordinate space.

Overrides:
coordinateSpace in class ScruTable

count

public IntegerVar count()
Description copied from class: ScruTable
Return the number of domain elements, which is to say, the number of associations.
'table->count()' should be equivalent to 'table->domain()->count()'.
Used to say: 'Return the number of range elements'. This seems clearly wrong.

Overrides:
count in class ScruTable

domain

public XnRegion domain()
Description copied from class: ScruTable
Return an XuRegion representing a snapshot of the current domain.
'table->domain()->hasMember(p)' iff 'table->fetch(p) !!= NULL'.

Overrides:
domain in class ScruTable

fetch

public Heaper fetch(Position key)
Description copied from class: ScruTable
Return the range element at the domain position key. The routine will return
NULL if the position is not in the table.

Overrides:
fetch in class ScruTable

remove

public void remove(Position anIdx)
Remove a key->value association from the table.
Blast if the key is not present.


subTable

public ScruTable subTable(XnRegion reg)
Description copied from class: ScruTable
Return a table which contains only the intersection of this table's domain and
the domain specified by 'region'.
table->subTable(r)->domain()->isEqual( table->domain()->intersect(r) ).
It is unspecified whether the resulting table starts as a snapshot of a subset of
me, after which we go our own ways; or whether the resulting table is a view
onto a subset of me, such that changes to me are also visible to him. Of
course, subclasses may specify more. If you want to ensure snapshot behavior,
do 'table->subTable(r)->asImmuTable()'.
NOTE: In the future we may specify snapshot behavior or we may specify view
behavior. As a client this shouldn't effect you. However, if you implement a
new kind of ScruTable, please let us know. Also, if you have an opinion as to
which way you'd like the specification tightened up, please tell us.

Overrides:
subTable in class ScruTable

wipe

public boolean wipe(Position anIdx)
Remove a key->value association from the table.
Do not blast (or do anything else) if the key is not in my current domain.
Return TRUE if the association was present and removed,
Return FALSE if the association was not there


introduceAll

public void introduceAll(ScruTable table,
                         Dsp dsp,
                         XnRegion region)
'MuTable::introduceAll is to 'MuTable::introduce' as 'MuTable::storeAll' is to
'MuTable::store'. See MuTable::storeAll. In addition to the functionality
provided by MuTable::storeAll, I BLAST *if* all the associations I'm being
asked to store override existing associations of mine. If I BLAST for this
reason, then I guarantee that I haven't changed myself at all.


replaceAll

public void replaceAll(ScruTable table,
                       Dsp dsp,
                       XnRegion region)
'MuTable::replaceAll is to 'MuTable::replace' as 'MuTable::storeAll' is to
'MuTable::store'. See MuTable::storeAll. In addition to the functionality
provided by MuTable::storeAll, I BLAST *unless* all the associations I'm being
asked to store override existing associations of mine. If I BLAST for this
reason, then I guarantee that I haven't changed myself at all.


storeAll

public void storeAll(ScruTable table,
                     Dsp dsp,
                     XnRegion region)
I 'store' into myself (see MuTable::store) all the associations from 'table'.
If 'region' is provided, then I only store those associations from 'table' whose
key is inside 'region'. If 'dsp' is provided, then I transform the keys (from
the remaining associations) by dsp before storing into myself.


wipeAll

public void wipeAll(XnRegion region)
I 'wipe' from myself all associations whose key is in 'region'. See MuTable::wipe


includesKey

public boolean includesKey(Position aKey)
Description copied from class: ScruTable
includesKey is used to test for the presence of a key->value pair in the
table. This routine returns true if there is a value present at the specified
key, and false otherwise.
'table->includesKey(p)' iff 'table->domain()->hasMember(p)'.

Overrides:
includesKey in class ScruTable

isEmpty

public boolean isEmpty()
Description copied from class: ScruTable
Is there anything in the table?
'table->isEmpty()' iff 'table->domain()->isEmpty()'.

Overrides:
isEmpty in class ScruTable

stepper

public TableStepper stepper(OrderSpec order)
Description copied from class: ScruTable
Return a TableStepper which will enumerate my key->value mappings. The
Stepper component of the TableStepper protocol will just enumerate my values
(as that is what I'm a container *of*--the keys are simply how I organize my
contents). TableStepper provides additional protocol to ascetain the current
key. See TableStepper and XuRegion::stepper. The TableStepper I produce given
an order must enumerate keys according to the same rules which specify how
XuRegion::stepper must enumerate positions. I am not asserting that the actual
orders are the same, only that the correctness criteria on the allowable orders
are the same.
Keeping in mind that we are talking about equivalence of specification
and not equivalence of particular behavior, the following two statements
are equivalent:
{
SPTR(TableStepper) stomp = table->stepper(o);
SPTR(Position) key;
FOR_EACH(Heaper,val,stomp, {
key = stomp->key();
doSomethingWith(key, val);
});
}
and
{
SPTR(Heaper) val;
SPTR(ImmuTable) snapShot = table->asImmuTable();
FOR_EACH(Position,key,(snapShot->domain()->stepper(o)), {
val = snapShot->get (key);
doSomethingWith(key, val);
});
}

Overrides:
stepper in class ScruTable

asImmuTable

public ImmuTable asImmuTable()
Description copied from class: ScruTable
Return a side-effect-free snapshot of my current contents.
See ScruSet::asImmuSet.

Overrides:
asImmuTable in class ScruTable

asMuTable

public MuTable asMuTable()
Note that muTable->asMuTable() returns a copy of the original. The two
are now free to change independently.

Overrides:
asMuTable in class ScruTable

runAt

public XnRegion runAt(Position key)
Description copied from class: ScruTable
Return the length of the run starting at position key. A run is defined as a
contiguous (charming) sequence of domain positions mapping to equal (isEqual)
objects. Charming is defined as: Given a charming region R, for all a,c which
are elements of R and a >= b >= c, b is an element of R. Where '>=' is
according to the 'isGE' message.
NOTE: We may retire the above definition of charming. The possible changes
will only effect spaces which aren't fully ordered. OrderedRegions,
TreeRegions, and IntegerRegions will be unaffected, as any future definition of
'runAt' will be equivalent for them.

Overrides:
runAt in class ScruTable

copy

public ScruTable copy()
Description copied from class: ScruTable
A new one whose initial state is my current state, but that doesn't track
changes. Note that there is no implication that these can be 'destroy'ed
separately, because (for example) an ImmuTable just returns itself

Overrides:
copy in class ScruTable

emptySize

public ScruTable emptySize(IntegerVar size)
Description copied from class: ScruTable
Return an empty table just like the current one. The 'size' argument is a hint
about how big the count of the table will probably become (so that the new
table can be prepared to grow to that size efficiently).

Overrides:
emptySize in class ScruTable

atIntIntroduce

public void atIntIntroduce(IntegerVar key,
                           Heaper value)
Unboxed version. See class comment for XuInteger


atIntReplace

public void atIntReplace(IntegerVar key,
                         Heaper value)
Unboxed version. See class comment for XuInteger


atIntStore

public Heaper atIntStore(IntegerVar aKey,
                         Heaper anObject)
Unboxed version. See class comment for XuInteger


includesIntKey

public boolean includesIntKey(IntegerVar aKey)
Description copied from class: ScruTable
Unboxed version. See class comment for XuInteger

Overrides:
includesIntKey in class ScruTable

intFetch

public Heaper intFetch(IntegerVar key)
Description copied from class: ScruTable
Unboxed version. See class comment for XuInteger

Overrides:
intFetch in class ScruTable

intRemove

public void intRemove(IntegerVar anIdx)
Unboxed version. See class comment for XuInteger


intWipe

public boolean intWipe(IntegerVar anIdx)
Unboxed version. See class comment for XuInteger


runAtInt

public XnRegion runAtInt(IntegerVar index)
Description copied from class: ScruTable
Unboxed version. See class comment for XuInteger

Overrides:
runAtInt in class ScruTable

introduceAll

public void introduceAll(ScruTable other)

introduceAll

public void introduceAll(ScruTable table,
                         Dsp dsp)

removeAll

public void removeAll(XnRegion region)

replaceAll

public void replaceAll(ScruTable other)

replaceAll

public void replaceAll(ScruTable other,
                       Dsp dsp)

storeAll

public void storeAll(ScruTable other)

storeAll

public void storeAll(ScruTable table,
                     Dsp dsp)

actualHashForEqual

public int actualHashForEqual()
Description copied from class: ScruTable
See ScruTable::isEqual

Overrides:
actualHashForEqual in class ScruTable

isEqual

public boolean isEqual(java.lang.Object other)

sendSelfTo

public void sendSelfTo(Xmtr xmtr)
Description copied from class: Heaper
do nothing

Overrides:
sendSelfTo in class Heaper

problems

public static void problems()
Description copied from class: Heaper
A ProblemList for all X++ BLASTs


test

public static void test()
Table test


make

public static Heaper make(CoordinateSpace cs)
A new empty MuTable whose domain space is 'cs'.


make

public static Heaper make(CoordinateSpace cs,
                          XnRegion reg)
Semantically identical to 'muTable(cs)'. 'reg' just provides a hint as to what
part of the domain space the new table should expect to be occupied.


initTimeNonInherited

public static void initTimeNonInherited()


Translation - Copyright © 2003 David G Jones. All Rights Reserved.
Original Udanax-Gold - Copyright © 1979-1999 Udanax.com. All rights reserved.