Data.Array.Unsafe
| Авторские права | (c) Университет Глазго 2011 |
|---|---|
| Лицензия | BSD (см. файл libraries/base/LICENSE) |
| Поддержка | libraries@haskell.org |
| Стабильность | экспериментальная |
| Переносимость | непереносимая (использует Data.Array.MArray) |
| Безопасный Haskell | Нет |
| Язык | Haskell2010 |
Содержание
Описание
Содержит различные небезопасные операции, которые могут быть выполнены над массивами.
С момента: 0.4.0.0
Небезопасные операции
castSTUArray :: STUArray s ix a -> ST s (STUArray s ix b) Источник
Преобразует STUArray с одним типом элементов в STUArray с другим типом элементов. Все элементы результирующего массива неопределены (если вы не знаете, что делаете...).
castIOUArray :: IOUArray ix a -> IO (IOUArray ix b) Источник
Преобразует IOUArray с одним типом элементов в IOUArray с другим типом элементов. Все элементы результирующего массива неопределены (если вы не знаете, что делаете...).
unsafeFreeze :: (Ix i, MArray a e m, IArray b e) => a i e -> m (b i e) Источник
Преобразует изменяемый массив в неизменяемый массив. Реализация может либо просто преобразовать массив из одного типа в другой без копирования, либо скопировать массив полностью.
Обратите внимание, что, поскольку массив, возможно, не копируется, любые последующие изменения, внесённые в изменяемую версию массива, могут быть объединены с неизменяемой версией. Поэтому безопасно использовать, если изменяемая версия не изменяется после операции замораживания.
Реализация без копирования поддерживается только для определённых пар типов массивов; одно ограничение заключается в том, что типы массивов должны иметь идентичные представления. В GHC следующие пары типов массивов имеют некопируемую реализацию unsafeFreeze с O(1) сложностью. Так как оптимизированные версии активируются специализациями, для их получения необходимо скомпилировать с оптимизацией (-O).
unsafeThaw :: (Ix i, IArray a e, MArray b e m) => a i e -> m (b i e) Источник
Преобразует неизменяемый массив в изменяемый массив. Реализация может либо просто преобразовать массив из одного типа в другой без копирования, либо скопировать массив полностью.
Обратите внимание, что, поскольку массив, возможно, не копируется, любые последующие изменения, внесённые в изменяемую версию массива, могут быть объединены с неизменяемой версией. Поэтому его использование безопасно только если неизменяемый массив больше не используется в этом потоке и нет возможности, что он будет использоваться в другом потоке. Если вы используете последовательность unsafeThawwriteunsafeFreeze в многопоточной среде, вы должны убедиться, что эта последовательность атомарна относительно других потоков, иначе может произойти сбой сборщика мусора (поскольку запись может записывать в замороженный массив).
Реализация без копирования поддерживается только для определённых пар типов массивов; одно ограничение заключается в том, что типы массивов должны иметь идентичные представления. В GHC следующие пары типов массивов имеют некопируемую реализацию unsafeThaw с O(1) сложностью. Так как оптимизированные версии активируются специализациями, для их получения необходимо скомпилировать с оптимизацией (-O).
unsafeForeignPtrToStorableArray :: Ix i => ForeignPtr e -> (i, i) -> IO (StorableArray i e) Источник
Создаёт StorableArray из произвольного ForeignPtr. Ответственность за обеспечение того, что ForeignPtr указывает на область памяти, достаточную для указанных границ, лежит на вызывающей стороне.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/array-0.5.1.0/Data-Array-Unsafe.html