2012-04-01 4 views
1

Ich möchte das vector Paket verwenden unboxed Arrays von StablePtr aWie stelle ich eine Data.Vector.Unbox-Instanz für StablePtrs in Haskell bereit?

speichern Wie kann ich die folgenden (oder Varianten davon) verwenden:

ptr2Int :: Ptr a -> Int 
ptr2Int (Ptr a) = I# (addr2Int# a) 

stablePtrToInt :: StablePtr a -> Int 
stablePtrToInt = ptr2Int . castStablePtrToPtr 

intToStablePtr :: Int -> StablePtr a 
intToStablePtr (I# i) = castPtrToStablePtr $ Ptr (int2Addr# i) 

eine Unbox Instanz für StablePtr a zu erklären?

+0

Sind Sie sicher, dass Sie Data.Vector.Storable nicht verwenden möchten ?, StablePtrs sind Instanzen von Storable. – dnaq

+0

oh danke für den Hinweis :) Ich denke, es wird tun. –

+0

@danvari würde es dir etwas ausmachen, deine Antwort als Antwort zu schreiben, damit ich sie annehmen kann. Übrigens gehe ich davon aus, dass die Speicherauslastung die gleiche wie bei ungepanzten Vektoren ist. –

Antwort

2

Es ist eigentlich nicht nötig, eine Unbox-Instanz für StablePtr zu definieren. Da StablePtrs Instanzen von Storable sind, können Sie stattdessen nur Data.Vector.Storable verwenden.