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"].! |
Free forum by Nabble | Edit this page |