show (NCBS x) = show x
noCaseCmp :: ByteString -> ByteString -> Ordering
-noCaseCmp a b = toForeignPtr a `cmp` toForeignPtr b
+noCaseCmp a b = a `seq` b `seq`
+ toForeignPtr a `cmp` toForeignPtr b
where
cmp :: (ForeignPtr Word8, Int, Int) -> (ForeignPtr Word8, Int, Int) -> Ordering
cmp (x1, s1, l1) (x2, s2, l2)
+ | x1 `seq` s1 `seq` l1 `seq` x2 `seq` s2 `seq` l2 `seq` False = undefined
| l1 == 0 && l2 == 0 = EQ
| x1 == x2 && s1 == s2 && l1 == l2 = EQ
| otherwise
withForeignPtr x1 $ \ p1 ->
withForeignPtr x2 $ \ p2 ->
noCaseCmp' (p1 `plusPtr` s1) l1 (p2 `plusPtr` s2) l2
-{-# INLINE noCaseCmp #-}
+
-- もし先頭の文字列が等しければ、短い方が小さい。
noCaseCmp' :: Ptr Word8 -> Int -> Ptr Word8 -> Int -> IO Ordering
noCaseCmp' p1 l1 p2 l2
+ | p1 `seq` l1 `seq` p2 `seq` l2 `seq` False = undefined
| l1 == 0 && l2 == 0 = return EQ
| l1 == 0 && l1 /= 0 = return LT
| l1 /= 0 && l2 == 0 = return GT
noCaseEq :: ByteString -> ByteString -> Bool
-noCaseEq a b = toForeignPtr a `cmp` toForeignPtr b
+noCaseEq a b = a `seq` b `seq`
+ toForeignPtr a `cmp` toForeignPtr b
where
cmp :: (ForeignPtr Word8, Int, Int) -> (ForeignPtr Word8, Int, Int) -> Bool
cmp (x1, s1, l1) (x2, s2, l2)
+ | x1 `seq` s1 `seq` l1 `seq` x2 `seq` s2 `seq` l2 `seq` False = undefined
| l1 /= l2 = False
| l1 == 0 && l2 == 0 = True
| x1 == x2 && s1 == s2 && l1 == l2 = True
noCaseEq' :: Ptr Word8 -> Ptr Word8 -> Int -> IO Bool
noCaseEq' p1 p2 l
+ | p1 `seq` p2 `seq` l `seq` False = undefined
| l == 0 = return True
| otherwise
= do c1 <- peek p1
, itrRequest :: !(TVar (Maybe Request))
, itrResponse :: !(TVar Response)
- -- FIXME: この三つは本來 TVar であるべきでないので、唯の Bool にす
- -- るに越した事は無いが、それは重要でない。
, itrRequestHasBody :: !(TVar Bool)
, itrRequestIsChunked :: !(TVar Bool)
, itrExpectedContinue :: !(TVar Bool)
, itrRequest = request
, itrResponse = responce
- , itrRequestHasBody = requestHasBody
- , itrRequestIsChunked = requestIsChunked
+ , itrRequestHasBody = requestHasBody
+ , itrRequestIsChunked = requestIsChunked
, itrExpectedContinue = expectedContinue
, itrReqChunkLength = reqChunkLength