gpt4 book ai didi

Cocoa 相当于 Carbon 方法 getPtrSize

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:30 27 4
gpt4 key购买 nike

我需要将 a carbon 方法转换为 cocoa ,但我无法找到任何关于 carbon 方法 getPtrSize 真正作用的文档。从我正在翻译的代码来看,它似乎返回了图像的字节表示形式,但这与名称并不匹配。有人可以给我一个关于这种方法的很好的解释,或者将我链接到一些描述它的文档。我正在翻译的代码是在一个名为 MCL 的通用 lisp 实现中,它有一个碳桥(我正在翻译成 CCL,这是一个带有 Cocoa 桥的通用 lisp 实现)。这是 MCL 代码(#_before 方法调用意味着它是一个 carbon 方法):

(defmethod COPY-CONTENT-INTO ((Source inflatable-icon)
(Destination inflatable-icon))
;; check for size compatibility to avoid disaster
(unless (and (= (rows Source) (rows Destination))
(= (columns Source) (columns Destination))
(= (#_getPtrSize (image Source))
(#_getPtrSize (image Destination))))
(error "cannot copy content of source into destination
inflatable icon: incompatible sizes"))
;; given that they are the same size only copy content
(setf (is-upright Destination) (is-upright Source))
(setf (height Destination) (height Source))
(setf (dz Destination) (dz Source))
(setf (surfaces Destination) (surfaces Source))
(setf (distance Destination) (distance Source))
;; arrays
(noise-map Source) ;; accessor makes array if needed
(noise-map Destination) ;; ;; accessor makes array if needed
(dotimes (Row (rows Source))
(dotimes (Column (columns Source))
(setf (aref (noise-map Destination) Row Column)
(aref (noise-map Source) Row Column))
(setf (aref (altitudes Destination) Row Column)
(aref (altitudes Source) Row Column))))
(setf (connectors Destination)
(mapcar #'copy-instance (connectors Source)))
(setf (visible-alpha-threshold Destination)
(visible-alpha-threshold Source))
;; copy Image: slow byte copy
(dotimes (I (#_getPtrSize (image Source)))
(%put-byte (image Destination) (%get-byte (image Source) i) i))
;; flat texture optimization:
;; do not copy texture-id
;; -> destination should get its own texture id from OpenGL
(setf (is-flat Destination) (is-flat Source))
;; do not compile flat textures: the display list overhead
;; slows things down by about 2x
(setf (auto-compile Destination) (not (is-flat Source)))
;; to make change visible we have to reset the compiled flag
(setf (is-compiled Destination) nil))

最佳答案

GetPtrSize 是来自 Memory Manager 的函数.当您使用 NewPtr(另一个内存管理器函数)分配内存时,内存管理器会跟踪您请求的内存量,以便您可以使用 GetPtrSize 检索该数字.

NewPtr 的现代替代品是 malloc,它不提供此类功能。有一个 malloc_size 函数,但它返回的数字可能会四舍五入到某个增量,因此它可能大于您最初要求的数字。您可以看到那(至少在概念上)有多糟糕。

GetPtrSize 的唯一准确替代方法就是自己跟踪缓冲区的大小。

或者,您可以用 NSMutableData 对象替换这些缓冲区。一个 NSMutableData 封装了一个缓冲区及其大小,使它们很容易保持在一起。

关于Cocoa 相当于 Carbon 方法 getPtrSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2403400/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com