Revert "Revert "Made use of ::= in core libraries and defined a RebindError condition...
[cslatevm.git] / src / lib / wordarray.slate
blob9a4dcef248b7fff7aef6c628fe957b3a3c50e8bb
1 collections define: #WordArray &parents: {Array}
2   &slots: {#bytes -> ByteArray new. #wordSize -> bytesPerWord}.
4 WordArray traits define: #LittleEndian &parents: {WordArray}.
5 WordArray LittleEndian traitsWindow atSlotNamed: #printName put: 'WordArray LittleEndian'.
6 WordArray traits define: #BigEndian &parents: {WordArray}.
7 WordArray BigEndian traitsWindow atSlotNamed: #printName put: 'WordArray BigEndian'.
9 w@(WordArray traits) new &capacity: size &wordSize: wordSize
10 "If called on WordArray, create a bigendian WordArray"
11 "TODO: Change this to use the image startup code to create a platform endian WordArray. Maybe. Would need to be careful about passing them to external code after an image restart (we may be on a different endian platform)"
13   size `defaultsTo: 0.
14   wordSize `defaultsTo: bytesPerWord.
15   w traits == WordArray traits
16     ifTrue: [WordArray BigEndian newSized: size wordSize: wordSize]
17     ifFalse: [w clone newSized: size wordSize: wordSize]
20 w@(WordArray traits) newFrom: a &wordSize: wordSize
21 [ wordSize `defaultsTo: bytesPerWord.
22   w clone `setting: #{#bytes. #wordSize} to: {a. wordSize}].
24 w@(WordArray traits) newSized: size wordSize: wordSize
25 [w clone `setting: #{#bytes. #wordSize} to: {w bytes newSize: (size * wordSize) abs. wordSize}].
27 w@(WordArray traits) size
28 [w bytes size / w wordSize].
30 _@(WordArray traits) elementType [Integer].
32 _@(WordArray traits) defaultElement [0].
34 w@(WordArray traits) accepts: i@(Integer traits) "Should be fixed 32bits"
35 [(0 below: (1 << (w wordSize * 8))) includes: i].
37 a@(WordArray BigEndian traits) at: offset
39   a wordSize = 8 ifTrue: [a bytes bigEndianInt64At: offset] ifFalse: [a bytes bigEndianInt32At: offset]
42 a@(WordArray LittleEndian traits) at: offset
44   a wordSize = 8 ifTrue: [a bytes littleEndianInt64At: offset] ifFalse: [a bytes littleEndianInt32At: offset]
47 a@(WordArray BigEndian traits) at: offset put: word
49   a wordSize = 8 ifTrue: [a bytes bigEndianInt64At: offset put: word] ifFalse: [a bytes bigEndianInt32At: offset put: word]
52 a@(WordArray LittleEndian traits) at: offset put: word
54   a wordSize = 8 ifTrue: [a bytes littleEndianInt64At: offset put: word] ifFalse: [a bytes littleEndianInt32At: offset put: word]