mirror of
https://github.com/logos-storage/outsourcing-Reed-Solomon.git
synced 2026-01-02 21:53:09 +00:00
62 lines
1.4 KiB
Haskell
62 lines
1.4 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 Class.Field
|
|
import NTT.Subgroup
|
|
import Data.Flat as L
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
newtype Poly a
|
|
= MkPoly (L.FlatArray a)
|
|
deriving Show
|
|
|
|
-- TEMPORARY HACK
|
|
instance (Eq a, Flat a) => Eq (Poly a) where
|
|
p == q = (coeffs p == coeffs q)
|
|
|
|
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
|
|
|
|
--------------------------------------------------------------------------------
|
|
|