module PlutusCore.Default.Universe.Cardano where

import PlutusCore.Evaluation.Machine.ExMemoryUsage
import PlutusCore.Pretty

import Data.Bits (shiftL)
import Data.ByteString (ByteString)

minBoundInteger :: Integer
minBoundInteger :: Integer
minBoundInteger = Integer -> Integer
forall a. Num a => a -> a
negate (Integer -> Int -> Integer
forall a. Bits a => a -> Int -> a
shiftL Integer
1 Int
262143)
{-# NOINLINE minBoundInteger #-}

maxBoundInteger :: Integer
maxBoundInteger :: Integer
maxBoundInteger = Integer -> Int -> Integer
forall a. Bits a => a -> Int -> a
shiftL Integer
1 Int
262143 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
- Integer
1
{-# NOINLINE maxBoundInteger #-}

maxBoundByteString :: Int
maxBoundByteString :: Int
maxBoundByteString = Int
65536
{-# INLINE maxBoundByteString #-}

-- | Cardano on-chain integer
newtype CInteger = CInteger Integer
  deriving newtype (CInteger -> CostRose
(CInteger -> CostRose) -> ExMemoryUsage CInteger
forall a. (a -> CostRose) -> ExMemoryUsage a
$cmemoryUsage :: CInteger -> CostRose
memoryUsage :: CInteger -> CostRose
ExMemoryUsage, PrettyBy ConstConfig)

-- | Cardano on-chain bytestring
newtype CByteString = CByteString ByteString
  deriving newtype (CByteString -> CostRose
(CByteString -> CostRose) -> ExMemoryUsage CByteString
forall a. (a -> CostRose) -> ExMemoryUsage a
$cmemoryUsage :: CByteString -> CostRose
memoryUsage :: CByteString -> CostRose
ExMemoryUsage, PrettyBy ConstConfig)