packages feed

dicom 0.2.0.0 → 0.3.0.0

raw patch · 3 files changed

+31/−6 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.DICOM.Object: FragmentContent :: [ByteString] -> ElementContent

Files

dicom.cabal view
@@ -1,5 +1,5 @@ name:                dicom-version:             0.2.0.0+version:             0.3.0.0 synopsis:            A library for reading and writing DICOM files in the Explicit VR Little Endian transfer syntax. license:             GPL-3 license-file:        LICENSE
src/Data/DICOM/Object.hs view
@@ -95,8 +95,14 @@  data ElementContent   = BytesContent B.ByteString-  | SequenceContent Sequence deriving (Show, Eq)+  | FragmentContent [B.ByteString]+  | SequenceContent Sequence deriving Eq +instance Show ElementContent where+  showsPrec p (BytesContent _)    = showParen (p > 10) $ showString "BytesContent {..}"+  showsPrec p (FragmentContent f) = showParen (p > 10) $ showString "FragmentContent { length = " . shows (length f) . showString " }"+  showsPrec p (SequenceContent s) = showParen (p > 10) $ showString "SequenceContent " . showsPrec 11 s+ data Element = Element   { elementTag     :: Tag   , elementVL      :: VL@@ -126,7 +132,10 @@     content <- case _vr of       SQ -> SequenceContent <$> readSequence _vl       _  -> case _vl of-              UndefinedValueLength -> failWithOffset "Undefined VL not implemented"+              UndefinedValueLength ->+                case _tag of+                  PixelData -> FragmentContent <$> readFragmentData+                  _ -> failWithOffset "Undefined VL not implemented"               _ -> do                 bytes <- getByteString $ fromIntegral $ runVL _vl                 return $ BytesContent bytes@@ -141,6 +150,7 @@     case elementContent el of       SequenceContent s -> writeSequence (elementVL el) s       BytesContent bs -> putByteString bs+      FragmentContent _ -> fail "Fragment content is not supported for writing."  readSequence :: VL -> Get Sequence readSequence UndefinedValueLength = do@@ -159,6 +169,19 @@       putWord32le 0     _ -> return () +readFragmentData :: Get [B.ByteString]+readFragmentData = do+  els <- untilG (isSequenceDelimitationItem <$> get) $ do+    t <- get+    case t of+      Item -> do+        itemLength <- getWord32le+        getByteString $ fromIntegral $ itemLength+      _ -> failWithOffset "Expected Item tag"+  SequenceDelimitationItem <- get+  skip 4+  return els+ instance Binary SequenceItem where   get = do     t <- get@@ -174,7 +197,7 @@           _ -> do             els <- untilByteCount (fromIntegral itemLength) get             return $ SequenceItem itemLength els-      _ -> failWithOffset "Unexpected tag"+      _ -> failWithOffset "Expected Item tag"   put si = do     put Item     putWord32le $ sequenceItemLength si@@ -201,7 +224,7 @@   start <- bytesRead   flip untilG a $ do     end <- bytesRead-    return (end - start < count)+    return (end - start >= count)  isVLReserved :: VR -> Bool isVLReserved OB = True@@ -355,4 +378,3 @@  object :: [Element] -> Object object = Object . sortBy (compare `on` elementTag)-
src/Data/DICOM/Tag.hs view
@@ -23,6 +23,7 @@   , pattern Item   , pattern ItemDelimitationItem   , pattern SequenceDelimitationItem+  , pattern PixelData    , tag   ) where@@ -66,6 +67,8 @@ pattern Item                         = Tag SequenceGroup (TagElement 0xE000) pattern ItemDelimitationItem         = Tag SequenceGroup (TagElement 0xE00D) pattern SequenceDelimitationItem     = Tag SequenceGroup (TagElement 0xE0DD)++pattern PixelData                    = Tag (TagGroup 0x7FE0) (TagElement 0x0010)  -- Smart constructors