| Copyright | (c) 2013-2021 Galois Inc. |
|---|---|
| License | BSD3 |
| Maintainer | cryptol@galois.com |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Cryptol.Backend.SeqMap
Contents
Description
Synopsis
- data SeqMap sym a
- indexSeqMap :: (Integer -> SEval sym a) -> SeqMap sym a
- lookupSeqMap :: Backend sym => SeqMap sym a -> Integer -> SEval sym a
- finiteSeqMap :: Backend sym => sym -> [SEval sym a] -> SeqMap sym a
- infiniteSeqMap :: Backend sym => sym -> [SEval sym a] -> SEval sym (SeqMap sym a)
- enumerateSeqMap :: (Backend sym, Integral n) => n -> SeqMap sym a -> [SEval sym a]
- streamSeqMap :: Backend sym => SeqMap sym a -> [SEval sym a]
- reverseSeqMap :: Backend sym => Integer -> SeqMap sym a -> SeqMap sym a
- updateSeqMap :: SeqMap sym a -> Integer -> SEval sym a -> SeqMap sym a
- dropSeqMap :: Backend sym => Integer -> SeqMap sym a -> SeqMap sym a
- concatSeqMap :: Backend sym => Integer -> SeqMap sym a -> SeqMap sym a -> SeqMap sym a
- splitSeqMap :: Backend sym => Integer -> SeqMap sym a -> (SeqMap sym a, SeqMap sym a)
- memoMap :: Backend sym => sym -> Nat' -> SeqMap sym a -> SEval sym (SeqMap sym a)
- delaySeqMap :: Backend sym => sym -> SEval sym (SeqMap sym a) -> SEval sym (SeqMap sym a)
- zipSeqMap :: Backend sym => sym -> (a -> a -> SEval sym a) -> Nat' -> SeqMap sym a -> SeqMap sym a -> SEval sym (SeqMap sym a)
- mapSeqMap :: Backend sym => sym -> (a -> SEval sym a) -> Nat' -> SeqMap sym a -> SEval sym (SeqMap sym a)
- mergeSeqMap :: Backend sym => sym -> (SBit sym -> a -> a -> SEval sym a) -> SBit sym -> SeqMap sym a -> SeqMap sym a -> SeqMap sym a
- barrelShifter :: Backend sym => sym -> (SBit sym -> a -> a -> SEval sym a) -> (SeqMap sym a -> Integer -> SEval sym (SeqMap sym a)) -> Nat' -> SeqMap sym a -> Integer -> [IndexSegment sym] -> SEval sym (SeqMap sym a)
- shiftSeqByInteger :: Backend sym => sym -> (SBit sym -> a -> a -> SEval sym a) -> (Integer -> Integer -> Maybe Integer) -> SEval sym a -> Nat' -> SeqMap sym a -> SInteger sym -> SEval sym (SeqMap sym a)
- data IndexSegment sym
- = BitIndexSegment (SBit sym)
- | WordIndexSegment (SWord sym)
Sequence Maps
A sequence map represents a mapping from nonnegative integer indices to values. These are used to represent both finite and infinite sequences.
finiteSeqMap :: Backend sym => sym -> [SEval sym a] -> SeqMap sym a Source #
Generate a finite sequence map from a list of values
infiniteSeqMap :: Backend sym => sym -> [SEval sym a] -> SEval sym (SeqMap sym a) Source #
Generate an infinite sequence map from a stream of values
enumerateSeqMap :: (Backend sym, Integral n) => n -> SeqMap sym a -> [SEval sym a] Source #
Create a finite list of length n of the values from [0..n-1] in
the given the sequence emap.
streamSeqMap :: Backend sym => SeqMap sym a -> [SEval sym a] Source #
Create an infinite stream of all the values in a sequence map
Reverse the order of a finite sequence map
dropSeqMap :: Backend sym => Integer -> SeqMap sym a -> SeqMap sym a Source #
Drop the first n elements of the given SeqMap.
concatSeqMap :: Backend sym => Integer -> SeqMap sym a -> SeqMap sym a -> SeqMap sym a Source #
Concatenate the first n values of the first sequence map onto the
beginning of the second sequence map.
splitSeqMap :: Backend sym => Integer -> SeqMap sym a -> (SeqMap sym a, SeqMap sym a) Source #
Given a number n and a sequence map, return two new sequence maps:
the first containing the values from [0..n-1] and the next containing
the values from n onward.
memoMap :: Backend sym => sym -> Nat' -> SeqMap sym a -> SEval sym (SeqMap sym a) Source #
Given a sequence map, return a new sequence map that is memoized using a finite map memo table.
zipSeqMap :: Backend sym => sym -> (a -> a -> SEval sym a) -> Nat' -> SeqMap sym a -> SeqMap sym a -> SEval sym (SeqMap sym a) Source #
Apply the given evaluation function pointwise to the two given sequence maps.
mapSeqMap :: Backend sym => sym -> (a -> SEval sym a) -> Nat' -> SeqMap sym a -> SEval sym (SeqMap sym a) Source #
Apply the given function to each value in the given sequence map
mergeSeqMap :: Backend sym => sym -> (SBit sym -> a -> a -> SEval sym a) -> SBit sym -> SeqMap sym a -> SeqMap sym a -> SeqMap sym a Source #
Arguments
| :: Backend sym | |
| => sym | |
| -> (SBit sym -> a -> a -> SEval sym a) | ifthenelse operation of values |
| -> (SeqMap sym a -> Integer -> SEval sym (SeqMap sym a)) | concrete shifting operation |
| -> Nat' | Size of the map being shifted |
| -> SeqMap sym a | initial value |
| -> Integer | |
| -> [IndexSegment sym] | segments of the shift amount, in big-endian order |
| -> SEval sym (SeqMap sym a) |
Arguments
| :: Backend sym | |
| => sym | |
| -> (SBit sym -> a -> a -> SEval sym a) | ifthenelse operation of values |
| -> (Integer -> Integer -> Maybe Integer) | reindexing operation |
| -> SEval sym a | zero value |
| -> Nat' | size of the sequence |
| -> SeqMap sym a | sequence to shift |
| -> SInteger sym | shift amount, assumed to be in range [0,len] |
| -> SEval sym (SeqMap sym a) |
data IndexSegment sym Source #
Constructors
| BitIndexSegment (SBit sym) | |
| WordIndexSegment (SWord sym) |