FFI: FFI-Kernel-mt.152.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

FFI: FFI-Kernel-mt.152.mcz

commits-2
Marcel Taeumel uploaded a new version of FFI-Kernel to project FFI:
http://source.squeak.org/FFI/FFI-Kernel-mt.152.mcz

==================== Summary ====================

Name: FFI-Kernel-mt.152
Author: mt
Time: 16 May 2021, 7:59:09.18058 am
UUID: 45ab85b9-b754-6c41-91ae-029f790e1e23
Ancestors: FFI-Kernel-mt.151

Replaces the misnomer #asArray in ExternalStructure with a class-side #with: on ExternalData -- which fits the expected protocol for array creation.

=============== Diff against FFI-Kernel-mt.151 ===============

Item was added:
+ ----- Method: ExternalData class>>with: (in category 'instance creation') -----
+ with: externalStructure
+ "Put externalStructure into an array. Note that pointer types need to be elevated as pointer type of the array type. The content type MUST be a non-pointer type because the handle will decide between internal memory or external address."
+
+ | contentType arrayType |
+ contentType := externalStructure externalType asNonPointerType.
+
+ contentType isAtomic ifTrue: [
+ ^ (contentType allocate: 1)
+ at: 1 put: externalStructure getHandle;
+ yourself].
+
+ arrayType := contentType asArrayType: 1.
+
+ ^ ExternalData
+ fromHandle: externalStructure getHandle
+ type: arrayType!

Item was removed:
- ----- Method: ExternalStructure>>asArray (in category 'converting') -----
- asArray
- "Convert the receiver into an array. Note that pointer types need to be elevated as pointer type of the array type. The content type MUST be a non-pointer type because the handle will decide between internal memory or external address."
-
- | contentType arrayType |
- contentType := self externalType asNonPointerType.
-
- contentType isAtomic ifTrue: [
- ^ (contentType allocate: 1)
- at: 1 put: handle;
- yourself].
-
- arrayType := contentType asArrayType: 1.
- self externalType isPointerType
- ifTrue: [arrayType := arrayType asPointerType].
-
- ^ ExternalData
- fromHandle: handle
- type: arrayType!

Item was changed:
  ----- Method: ExternalStructure>>ffiEqual: (in category 'comparing') -----
  ffiEqual: other
  "We can compare bytes if the types are compatible."
 
  (self ffiIdentical: other) ifTrue: [^ true].
  self externalType asNonPointerType = other externalType asNonPointerType ifFalse: [^ false].
+ ^ (ExternalData with: self) ffiEqual: (ExternalData with: other)!
- ^ self asArray ffiEqual: other asArray!

Item was changed:
  ----- Method: ExternalStructure>>ffiEqualityHash (in category 'comparing') -----
  ffiEqualityHash
 
  ^ self ffiIdentityHash
+ bitXor: (ExternalData with: self) ffiEqualityHash!
- bitXor: self asArray ffiEqualityHash!

Item was changed:
  ----- Method: ExternalStructure>>postCopy (in category 'copying') -----
  postCopy
  "Copy external memory into object memory, shallowCopy otherwise."
 
  self externalType isPointerType
+ ifTrue: [handle := (ExternalData with: self) postCopy getHandle]
- ifTrue: [handle := self asArray postCopy getHandle]
  ifFalse: [handle := handle copy. "Materializes byte-array read-writer section if any"].!