org.abora.gold.collection.tables
Class MuArray

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
                          |
                          +--org.abora.gold.collection.tables.IntegerTable
                                |
                                +--org.abora.gold.collection.tables.MuArray
Direct Known Subclasses:
ActualArray

public class MuArray
extends IntegerTable

The class XuArray is intended to model zero-based arrays with integer keys (indices).
This makes them like the array primitive in C and C++. There is an additional constraint,
which is they are to have simple domains. Therefore they should not be constructed with
non-contiguous sections. This is not currently enforced. Given that it is enforced, an
XuArray with count N would have as its domain exactly the integers from 0 to N-1.
There is some controversy over whether XuArray should be a type and enforce this contraint
(by BLASTing if an attempt is made to violate the constraint), or whether XuArray is just
a specialized implementation for when an IntegerTable happens to meet this constraint; in
which case it should "become" a more general implementation when an attempt is made to
violate the constraint (see "Type Safe Become"). In the latter case, XuArray will
probably be made a private class as well. Please give us your opinion.
XuArray provides no additional protocol.


Field Summary
protected static Signal MustBeContiguousDomainSignal
           
 
Fields inherited from class org.abora.gold.collection.tables.MuTable
AlreadyInTableSignal, NotInDomainSignal, 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
MuArray()
           
 
Method Summary
static MuArray array()
          A new empty XnArray
static MuArray array(Heaper obj0)
          A new XnArray initialized with a single element, 'obj0', stored at index 0.
static MuArray array(Heaper obj0, Heaper obj1)
          A new XnArray initialized with a two elements stored at indicies 0 and 1.
static MuArray array(Heaper obj0, Heaper obj1, Heaper obj2)
          A new XuArray initialized with a three elements stored at indicies 0, 1, and 2.
static MuArray array(Heaper obj0, Heaper obj1, Heaper obj2, Heaper obj3)
          A new XuArray initialized with a four elements stored at indicies 0 through 3.
static TableAccumulator arrayAccumulator()
          Returns an Accumulator which will produce an XuArray of the elements
accumulated into it in order of accumulation.
static TableAccumulator arrayAccumulator(MuArray onArray)
          An accumulator which will accumulate by appending elements onto the end of
'onArray'.
 Heaper atIntStore(IntegerVar key, Heaper value)
          Unboxed version.
 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.
 IntegerVar highestIndex()
          Given that the table is non-empty, 'intTab->highestIndex()' is equivalent to
'CAST(IntegerRegion,intTab->domain())->upperBound() -1'.
 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.
 Heaper intFetch(IntegerVar key)
          Unboxed version.
 boolean intWipe(IntegerVar anIdx)
          Unboxed version.
 boolean isEmpty()
          Is there anything in the table?
'table->isEmpty()' iff 'table->domain()->isEmpty()'.
 IntegerVar lowestIndex()
          Given that the table is non-empty, 'intTab->lowestIndex()' is equivalent to
'CAST(IntegerRegion,intTab->domain())->lowerBound()'.
static Heaper make(IntegerVar someSize)
          'someSize' is a hint about how big we should expect the array to need to grow.
static ScruTable offsetScruArray(MuArray array, Dsp dsp)
          The resulting ScruTable is a view onto 'array'.
 ScruTable offsetSubTableBetween(IntegerVar startIndex, IntegerVar stopIndex, IntegerVar firstIndex)
          Return a table which contains the elements from start to stop, starting at firstIndex.
Zero-based subclasses will blast if firstIndex is non-zero
 XnRegion runAt(Position key)
          Return the length of the run starting at position key.
 XnRegion runAtInt(IntegerVar key)
          Unboxed version.
 TableStepper stepper(OrderSpec order)
          Return a stepper on this table.
 ScruTable subTable(XnRegion region)
          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.
 ScruTable subTableBetween(IntegerVar startLoc, IntegerVar endLoc)
          Hack for C++ overloading problem
 Heaper theOne()
          Iff I contain exactly one range element, return it.
 ScruTable transformedBy(Dsp dsp)
          Return a ScruTable with the domain of the receiver transformed by the Dsp.
'table->transformedBy(d)->fetch(p)' is equivalent to
'table->fetch(d->of(p))'.
See ScruTable::subTable for caveats regarding whether we return a snapshot
or a view.
 boolean wipe(Position key)
          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.IntegerTable
atIntIntroduce, atIntReplace, atIntroduce, atReplace, intRemove, make, make, make, make, make, make, remove
 
Methods inherited from class org.abora.gold.collection.tables.MuTable
actualHashForEqual, asImmuTable, asMuTable, initTimeNonInherited, introduceAll, introduceAll, introduceAll, isEqual, make, make, problems, removeAll, replaceAll, replaceAll, replaceAll, sendSelfTo, storeAll, storeAll, storeAll, test
 
Methods inherited from class org.abora.gold.collection.tables.ScruTable
asOrderedCollection, backfollowFrom, contentsEqual, contentsHash, dox, get, intGet, isEqual, printOn, printOnWithSimpleSyntax, printOnWithSyntax, range, stepper
 
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

MustBeContiguousDomainSignal

protected static Signal MustBeContiguousDomainSignal
Constructor Detail

MuArray

public MuArray()
Method Detail

atIntStore

public Heaper atIntStore(IntegerVar key,
                         Heaper value)
Description copied from class: MuTable
Unboxed version. See class comment for XuInteger

Overrides:
atIntStore in class IntegerTable

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 IntegerTable

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 IntegerTable

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 IntegerTable

highestIndex

public IntegerVar highestIndex()
Description copied from class: IntegerTable
Given that the table is non-empty, 'intTab->highestIndex()' is equivalent to
'CAST(IntegerRegion,intTab->domain())->upperBound() -1'. The reason for the
'-1' is that the 'upperBound' is an exclusive upper bound (see
IntegerRegion::upperBound), whereas 'highestIndex' is the highest index which is
in my domain. I need to here specify what 'highestIndex' does if I am empty.

Overrides:
highestIndex in class IntegerTable

intFetch

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

Overrides:
intFetch in class IntegerTable

intWipe

public boolean intWipe(IntegerVar anIdx)
Description copied from class: MuTable
Unboxed version. See class comment for XuInteger

Overrides:
intWipe in class IntegerTable

lowestIndex

public IntegerVar lowestIndex()
Description copied from class: IntegerTable
Given that the table is non-empty, 'intTab->lowestIndex()' is equivalent to
'CAST(IntegerRegion,intTab->domain())->lowerBound()'. 'lowestIndex' is the
lowest index which is in my domain. I need to here specify what 'lowestIndex'
does if I am empty.

Overrides:
lowestIndex in class IntegerTable

offsetSubTableBetween

public ScruTable offsetSubTableBetween(IntegerVar startIndex,
                                       IntegerVar stopIndex,
                                       IntegerVar firstIndex)
Return a table which contains the elements from start to stop, starting at firstIndex.
Zero-based subclasses will blast if firstIndex is non-zero

Overrides:
offsetSubTableBetween in class IntegerTable

subTable

public ScruTable subTable(XnRegion region)
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 IntegerTable

subTableBetween

public ScruTable subTableBetween(IntegerVar startLoc,
                                 IntegerVar endLoc)
Description copied from class: IntegerTable
Hack for C++ overloading problem

Overrides:
subTableBetween in class IntegerTable

transformedBy

public ScruTable transformedBy(Dsp dsp)
Description copied from class: ScruTable
Return a ScruTable with the domain of the receiver transformed by the Dsp.
'table->transformedBy(d)->fetch(p)' is equivalent to
'table->fetch(d->of(p))'.
See ScruTable::subTable for caveats regarding whether we return a snapshot
or a view. All the same caveats apply.

Overrides:
transformedBy 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 IntegerTable

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 IntegerTable

includesIntKey

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

Overrides:
includesIntKey in class IntegerTable

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 IntegerTable

runAtInt

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

Overrides:
runAtInt in class IntegerTable

stepper

public TableStepper stepper(OrderSpec order)
Return a stepper on this table.

Overrides:
stepper in class IntegerTable

theOne

public Heaper theOne()
Description copied from class: ScruTable
Iff I contain exactly one range element, return it. Otherwise BLAST.
The idea for this message is taken from the THE function of ONTIC
(reference McAllester)

Overrides:
theOne in class ScruTable

wipeAll

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

Overrides:
wipeAll in class MuTable

atStore

public Heaper atStore(Position key,
                      Heaper value)
Description copied from class: MuTable
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

Overrides:
atStore in class IntegerTable

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 IntegerTable

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 IntegerTable

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 IntegerTable

wipe

public boolean wipe(Position key)
Description copied from class: MuTable
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

Overrides:
wipe in class IntegerTable

array

public static MuArray array()
A new empty XnArray


array

public static MuArray array(Heaper obj0)
A new XnArray initialized with a single element, 'obj0', stored at index 0.


array

public static MuArray array(Heaper obj0,
                            Heaper obj1)
A new XnArray initialized with a two elements stored at indicies 0 and 1.


array

public static MuArray array(Heaper obj0,
                            Heaper obj1,
                            Heaper obj2)
A new XuArray initialized with a three elements stored at indicies 0, 1, and 2.


array

public static MuArray array(Heaper obj0,
                            Heaper obj1,
                            Heaper obj2,
                            Heaper obj3)
A new XuArray initialized with a four elements stored at indicies 0 through 3.


arrayAccumulator

public static TableAccumulator arrayAccumulator()
Returns an Accumulator which will produce an XuArray of the elements
accumulated into it in order of accumulation. See XuArray. Equivalent to
'tableAccumulator()'. Eventually either he or I should be declared obsolete.


arrayAccumulator

public static TableAccumulator arrayAccumulator(MuArray onArray)
An accumulator which will accumulate by appending elements onto the end of
'onArray'. It is an error for anyone else to modify 'onArray' between creating
this accumulator and accumulating into it. acc->value() will return 'onArray'
itself.


make

public static Heaper make(IntegerVar someSize)
'someSize' is a hint about how big we should expect the array to need to grow.


offsetScruArray

public static ScruTable offsetScruArray(MuArray array,
                                        Dsp dsp)
The resulting ScruTable is a view onto 'array'. It is a view in which each key
is offset by 'dsp' from where it is in 'array'. By saying it is a view, we mean
that as 'array' is modified, the view tracks the changes.



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