mirror of
https://github.com/logos-storage/outsourcing-Reed-Solomon.git
synced 2026-01-06 23:53:07 +00:00
56 lines
1.3 KiB
Haskell
56 lines
1.3 KiB
Haskell
|
|
|
||
|
|
{-# LANGUAGE StrictData, ScopedTypeVariables, PatternSynonyms #-}
|
||
|
|
module NTT.Poly.Flat where
|
||
|
|
|
||
|
|
import Prelude hiding (div,quot,rem)
|
||
|
|
import GHC.Real hiding (div,quot,rem)
|
||
|
|
|
||
|
|
import Data.Bits
|
||
|
|
import Data.Word
|
||
|
|
import Data.List
|
||
|
|
import Data.Array
|
||
|
|
|
||
|
|
import Control.Monad
|
||
|
|
|
||
|
|
import Foreign.C
|
||
|
|
import Foreign.Ptr
|
||
|
|
import Foreign.Marshal
|
||
|
|
import Foreign.ForeignPtr
|
||
|
|
|
||
|
|
import System.Random
|
||
|
|
import System.IO.Unsafe
|
||
|
|
|
||
|
|
import NTT.Subgroup
|
||
|
|
import Field.Class
|
||
|
|
import Data.Flat as L
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
newtype Poly a = MkPoly (L.FlatArray a)
|
||
|
|
|
||
|
|
pattern XPoly n arr = MkPoly (L.MkFlatArray n arr)
|
||
|
|
|
||
|
|
mkPoly :: Flat f => [f] -> Poly f
|
||
|
|
mkPoly = MkPoly . L.packFlatArrayFromList
|
||
|
|
|
||
|
|
mkPoly' :: Flat f => Int -> [f] -> Poly f
|
||
|
|
mkPoly' len xs = MkPoly $ L.packFlatArrayFromList' len xs
|
||
|
|
|
||
|
|
mkPolyArr :: Flat f => Array Int f -> Poly f
|
||
|
|
mkPolyArr = MkPoly . L.packFlatArray
|
||
|
|
|
||
|
|
mkPolyFlatArr :: L.FlatArray f -> Poly f
|
||
|
|
mkPolyFlatArr = MkPoly
|
||
|
|
|
||
|
|
coeffs :: Flat f => Poly f -> [f]
|
||
|
|
coeffs (MkPoly arr) = L.unpackFlatArrayToList arr
|
||
|
|
|
||
|
|
coeffsArr :: Flat f => Poly f -> Array Int f
|
||
|
|
coeffsArr (MkPoly arr) = L.unpackFlatArray arr
|
||
|
|
|
||
|
|
coeffsFlatArr :: Poly f -> L.FlatArray f
|
||
|
|
coeffsFlatArr (MkPoly flat) = flat
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------
|
||
|
|
|