From 4891dd8cd8d2227158dc81a437865283305f82ac Mon Sep 17 00:00:00 2001 From: joe Date: Thu, 31 Jul 2014 15:30:53 -0400 Subject: implemented 'delete' for hosts utility --- Hosts.hs | 19 +++++++++++++------ hosts.hs | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Hosts.hs b/Hosts.hs index 8d02cc3..5f09de1 100644 --- a/Hosts.hs +++ b/Hosts.hs @@ -9,6 +9,7 @@ module Hosts , assignName , assignName' , assignNewName + , removeName , inet_pton , inet_ntop , empty @@ -184,7 +185,18 @@ cannonizeName name line = scrubName f line f ws = [name," "] ++ pre ++ drop 2 rst where (pre,rst) = break (==name) ws + +removeName name hosts = hosts' + where + hosts' = scrubTrailingEmpties (maybe hosts (removeName0 name hosts) ns) + ns = Map.lookup name (namenum hosts) + +removeName0 name hosts nums = hosts + { namenum = Map.delete name (namenum hosts) + , numline = foldl' scrub (numline hosts) nums + } + where scrub m num = Map.adjust (scrubName $ filter (/=name)) num m assignName' :: Bool -> SockAddr -> L.ByteString -> Hosts -> Hosts assignName' iscannon addr name hosts = hosts' @@ -198,7 +210,7 @@ assignName' iscannon addr name hosts = hosts' else hosts { numline = foldl' canonize (numline hosts) $ fromJust ns} else let hosts0 = -- remove name if it's present - scrubTrailingEmpties $ maybe hosts (removeName hosts) ns + scrubTrailingEmpties $ maybe hosts (removeName0 name hosts) ns ns' = fmap (filter $ isLonerName . fromJust @@ -212,11 +224,6 @@ assignName' iscannon addr name hosts = hosts' (appendName iscannon name hosts0) a in hosts1 - removeName hosts nums = hosts - { namenum = Map.delete name (namenum hosts) - , numline = foldl' scrub (numline hosts) nums - } - where scrub m num = Map.adjust (scrubName $ filter (/=name)) num m newLine hosts = hosts { lineCount = cnt , numline = Map.insert cnt line $ numline hosts diff --git a/hosts.hs b/hosts.hs index 6c93b10..b73ecb3 100644 --- a/hosts.hs +++ b/hosts.hs @@ -65,7 +65,7 @@ grokPairing :: Bool -> Hosts -> (String,Either String SockAddr) -> Hosts grokPairing bCanon hosts (name,eaddr) = case eaddr of Right addr -> assignName' bCanon addr (L.pack name) hosts - Left "delete" -> error "deletion not implemented." + Left "delete" -> removeName (L.pack name) hosts main = do args <- getArgs -- cgit v1.2.3