module ID3.Type.Flags
where
import Data.Accessor
import Data.Accessor.Basic (compose)
import Data.Bits
import Data.Word (Word8)
import ID3.Type.Unparse
data Flags = Flags [Bool] deriving (Eq, Show)
emptyFlags :: Flags
emptyFlags = Flags $ replicate 8 False
initFlags = flip compose emptyFlags
mkFlags ns fs = initFlags $ zipWith access ns fs
where access n f = (accessFlag n) ^= f
allFlags :: Accessor Flags [Bool]
allFlags = accessor (\(Flags fs) -> fs) (\x _ -> Flags x)
accessFlag :: Int -> Accessor Flags Bool
accessFlag n = accessor (\(Flags fs) -> fs!!(n1)) (\x (Flags fs) -> Flags $ (take (n1) fs)++[x]++(drop n fs))
instance Parsed Flags where
unparse fs = [foldr fromBool 0 (zip [0..] (fs^.allFlags))]
where fromBool (i, True) = flip setBit i
fromBool (i, False) = flip clearBit i