OSBaseType, OSObjectPointer, and OSStructure protocols
This section describes the protocols supported by OSBaseType, OSObjectPointer, and OSStructure.
Instance methods: pointer arithmetic
+
Answer a new instance of the receiver, with the same indirection level, pointing to the data element at index anInteger from the data element referenced by the receiver.
-
Answer a new instance of the receiver, with the same indirection level, pointing to the data element at index anInteger before the data element referenced by the receiver.
decrement
Decrease the pointer by one to point to the previous data element.
decrementBy:
Decrease the pointer by anInteger to point to the previous data element.
increment
Increase the pointer by one to point to the next data element.
incrementBy:
Increase the pointer by anInteger to point to the next data element.
Instance methods: low-level storage access
These methods enable you to access the contents of an OSBaseType, OSStructure, or OSObjectPointer. All offsets are zero-relative. Accessing non-aligned addresses is valid but might be slower on processors that do not directly support this style of access.
address
Answer the operating system memory address of the start of the data element referenced by the receiver. This message is invalid for objects whose data element is stored in Smalltalk memory.
bool16At: anInteger
Answer the 16-bit Boolean at byte offset anInteger from the start of the storage area referenced by the receiver.
bool16At: anInteger put: aValue
Set the 16-bit Boolean at byte offset anInteger from the start of the storage area referenced by the receiver to the integer value of aValue. aValue may be nil, true, false, an Integer, a Character, or an OSObject. aValue is converted using the same rules as the pointer call-out conversion. There is one exception--instances are not allowed of OSObject that point to Smalltalk memory that is not fixed.
bool32At: anInteger
Answer the 32-bit Boolean at byte offset anInteger from the start of the storage area referenced by the receiver.
bool32At: anInteger put: aValue
Set the 32-bit Boolean at byte offset anInteger from the start of the storage area referenced by the receiver to the integer value of aValue. aValue may be nil, true, false, an Integer, a Character, or an OSObject. aValue is converted using the same rules as the pointer call-out conversion. There is one exception--instances are not allowed of OSObject that point to Smalltalk memory that is not fixed.
bool8At: anInteger
Answer the 8-bit Boolean at byte offset anInteger from the start of the storage area referenced by the receiver.
bool8At: anInteger put: aValue
Set the 8-bit Boolean at byte offset anInteger from the start of the storage area referenced by the receiver to the integer value of aValue. aValue might be nil, true, false, an Integer, a Character, or an OSObject. aValue is converted using the same rules as the pointer call-out conversion. There is one exception--instances are not allowed of OSObject that point to Smalltalk memory that is not fixed.
char16At: anInteger
Similar to bool16At:.
char16At anInteger put: aValue
Similar to bool16At:put:.
char8At: anInteger
Similar to bool8At:.
char8At anInteger put: aValue
Similar to bool8At:put:.
float32At: anInteger
Answer an instance of Float representing the 32-bit floating-point value at byte offset anInteger from the start of the storage area referenced by the receiver.
float32At: anInteger put: aValue
Set the 32-bit floating-point value at byte offset anInteger from the start of the storage area referenced by the receiver to aValue. aValue must be an instance of Float.
float64At: anInteger
Answer an instance of Float representing the 64-bit floating-point value at byte offset anInteger from the start of the storage area referenced by the receiver.
float64At: anInteger put: aValue
Set the 64-bit floating-point value at byte offset anInteger from the start of the storage area referenced by the receiver to aValue. aValue must be an instance of Float.
int8At: anInteger
Similar to bool8At:.
int8At anInteger put: aValue
Similar to bool8At:put:.
int16At: anInteger
Similar to bool16At:.
int16At anInteger put: aValue
Similar to bool16At:put:.
int32At: anInteger
Similar to bool32At:.
int32At anInteger put: aValue
Similar to bool32At:put:.
int64At: anInteger
Answer the 64-bit Integer at byte offset anInteger from the start of the storage area referenced by the receiver.
int64At anInteger put: aValue
Set the 64-bit Integer at byte offset anInteger from the start of the storage area referenced by the receiver to the integer value of aValue. aValue may be nil, true, false, an Integer, a Character, or an OSObject. aValue is converted using the same rules as the pointer call-out conversion. There is one exception--instances are not allowed of OSObject that point to Smalltalk memory that is not fixed.
longAt: anInteger
Answer the platform-dependent signed 32/64-bit Integer at byte offset anInteger from the start of the storage area referenced by the receiver.
longAt anInteger put: aValue
Set the platform-dependent signed 32/64-bit Integer at byte offset anInteger from the start of the storage area referenced by the receiver to the integer value of aValue.
pointerAt: anInteger
Answer the 32/64-bit Integer at byte offset anInteger from the start of the storage area referenced by the receiver.
pointerAt: anInteger put: aValue
Set the 32/64-bit Integer at byte offset anInteger from the start of the storage area referenced by the receiver to the integer value of aValue. aValue might be nil, true, false, an Integer, a Character, or an OSObject. aValue is converted using the same rules as the pointer call-out conversion. There is one exception--instances are not allowed of OSObject that point to Smalltalk memory that is not fixed.
pointerAt: anInteger type: anOSObjectSubclass
Create and answer a new struct instance of anOSObjectSubclass that points to the storage of the receiver starting at anInteger. An error is signaled if anInteger is less than anOSObjectSubclass fixedSize bytes from the end of the receiver's storage.
pointerBaseType
Answer the 32/64-bit OSBaseType used to represent pointers.
reference
Answer the Smalltalk memory referenced by the receiver. This message is invalid for objects whose data element is stored in operating system memory.
spointerAt: anInteger
Answer the 32/64-bit signed Integer at byte offset anInteger from the start of the storage area referenced by the receiver.
spointerAt: anInteger put: aValue
Set the 32/64-bit signed Integer at byte offset anInteger from the start of the storage area referenced by the receiver to the integer value of aValue. aValue might be nil, true, false, an Integer, a Character, or an OSObject. aValue is converted using the same rules as the pointer call-out conversion. There is one exception--instances are not allowed of OSObject that point to Smalltalk memory that is not fixed.
spointerBaseType
Answer the signed 32/64-bit OSBaseType used to represent pointers.
ssizeAt: anInteger
Answer an signed Integer, which is large enough to span the range of a pointer, at byte offset anInteger from the start of the storage area referenced by the receiver.
ssizeBaseType
Answer the signed 32/64-bit OSBaseType used to represent values large enough to span the range of a pointer.
structAt: anInteger type: anOSObjectSubclass
Create and answer a new struct instance of anOSObjectSubclass and copies enough bytes to fill it from the receiver starting at anInteger. An error is signaled if anInteger is less than anOSObjectSubclass fixedSize bytes from the end of the receiver's storage.
structAt: anInteger put: anOSObject
Copy the storage referenced by anOSObject over the storage for the receiver starting at anInteger. An error is signaled if anInteger is less than anOSObject class fixedSize bytes from the end of the receiver's storage.
memcpyFrom: start to: stop
Answer a ByteArray containing a copy of the bytes pointed to by the receiver from byte offset start up to and including byte offset stop.
memcpyStringFrom: start to: stop
Answer a String containing a copy of the bytes pointed to by the receiver from byte offset start up to and including byte offset stop.
memcpyFrom: start to: stop into: anOSOrBitObject startingAt: repStart
Copy bytes from byte offset start in the receiver up to and including byte offset stop into anOSOrBitObject starting at byte index repStart. Answer anOSOrBitObject. anOSOrBitObject might be a byte, word, or long object, or an OSObject.
int8At: anInteger
Similar to bool8At:.
int8At anInteger put: aValue
Similar to bool8At:put:.
uint16At: anInteger
Similar to bool16At:.
uint16At anInteger put: aValue
Similar to bool16At:put:.
uint32At: anInteger
Similar to bool32At:.
uint32At anInteger put: aValue
Similar to bool32At:put:.
uint64At: anInteger
Similar to int64At:.
uint64At anInteger put: aValue
Similar to int64At:put:.
longAt: anInteger
Answer the platform-dependent unsigned 32/64-bit Integer at byte offset anInteger from the start of the storage area referenced by the receiver.
longAt anInteger put: aValue
Set the platform-dependent unsigned 32/64-bit Integer at byte offset anInteger from the start of the storage area referenced by the receiver to the integer value of aValue.
upointerAt: anInteger
Answer the 32/64-bit unsigned Integer at byte offset anInteger from the start of the storage area referenced by the receiver.
upointerAt: anInteger put: aValue
Set the 32/64-bit unsigned Integer at byte offset anInteger from the start of the storage area referenced by the receiver to the integer value of aValue. aValue might be nil, true, false, an Integer, a Character, or an OSObject. aValue is converted using the same rules as the pointer call-out conversion. There is one exception--instances are not allowed of OSObject that point to Smalltalk memory that is not fixed.
upointerBaseType
Answer the unsigned 32/64-bit OSBaseType used to represent pointers.
usizeAt: anInteger
Answer an unsigned Integer, which is large enough to span the range of a pointer, at byte offset anInteger from the start of the storage area referenced by the receiver.
usizeAt: anInteger put: aValue
Set the unsigned Integer, which is large enough to span the range of a pointer, at byte offset anInteger from the start of the storage area referenced by the receiver to the integer value of aValue. aValue might be nil, true, false, an Integer, a Character, or an OSObject. aValue is converted using the same rules as the pointer call-out conversion. There is one exception--instances are not allowed of OSObject that point to Smalltalk memory that is not fixed.
usizeBaseType
Answer the unsigned 32/64-bit OSBaseType used to represent values large enough to span the range of a pointer.
Instance methods: freeing
free
Free the storage for the receiver. If the receiver does not represent a pointer to operating system memory, do nothing.
Instance methods: testing
=
Answer a Boolean indicating whether the receiver and anOSObject are equal. Two instances of OSObject are considered to be equal if they represent the identical storage in operating system or Smalltalk memory.
memcmpFrom: start to: stop with: anOSOrBitObject startingAt: repStart
Compare the bytes in the receiver from offset start to stop with the bytes in aCollection starting at repStart. If the bytes are all equal, answer 0. If the bytes are not all equal, the result is based on the first bytes that are not equal. If the byte from the receiver is less than the byte from aCollection, answer -1. If the byte from the receiver is greater than the byte from aCollection, answer 1. anOSOrBitObject might be a byte, word, or long object, or an OSObject.
isImmediate
Answer true if the receiver is an immediate.
isAddress
Answer true if the receiver represents a pointer to operating system memory.
isNull
Answer true if the receiver is a NULL value; that is, if the receiver is a pointer to location 0 in memory.
isAddress
Answer true if the receiver represents a pointer to Smalltalk memory.
notNull
Answer true if the receiver is not a NULL value.
Class methods: instance creation
address: anInteger
Answer a new instance of the receiver referring to operating system memory at address anInteger.
calloc
Answer a new instance of the receiver referring to storage in operating system memory large enough to hold the fixedSize of the receiver in bytes.
alloc: anInteger
Answer a new instance of the receiver referring to storage in operating system memory large enough to hold anInteger times the fixedSize of the receiver in bytes.
new
Answer a new instance of the receiver referring to Smalltalk storage large enough to hold the fixedSize of the receiver in bytes.
reference: aByteArray
Answer a new instance of the receiver referring to the start of aByteArray.