diff options
| author | ssmith | 2006-05-14 02:02:10 -0700 |
|---|---|---|
| committer | ssmith | 2006-05-14 02:02:10 -0700 |
| commit | 0d39716d6493ab31780dc7bba9d376bd7218f233 (patch) | |
| tree | 0ba1c581db67a5318cd85ee3a201cb12714a4fa7 /bencode.erl | |
| parent | be5e8817ca5570b66f57f2d56148c88ae73a8531 (diff) | |
Misc updates in preparation for encoder
Diffstat (limited to 'bencode.erl')
| -rw-r--r-- | bencode.erl | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/bencode.erl b/bencode.erl index aaf737e..fb8e9f3 100644 --- a/bencode.erl +++ b/bencode.erl @@ -1,10 +1,17 @@ -module(bencode). --export([bdecode/1]). +-export([bdecode/1, bencode/1]). -import(string, [substr/2, substr/3, to_integer/1, chr/2]). +%% %% %% %% %% %% %% %% Decoding %% %% %% %% %% %% %% %% + +bencode(Val) when is_integer(Val) -> + "i" ++ integer_to_list(Val) ++ "e". + +%% %% %% %% %% %% %% %% Decoding %% %% %% %% %% %% %% %% + %% String bdecode([Char | _Rest] = Str) when Char >= $0, Char =< $9 -> ColIdx = chr(Str, $:), @@ -22,34 +29,33 @@ bdecode([Char | Rest]) when Char == $i -> %% List bdecode([Char | Rest]) when Char == $l -> - {List, Rem} = dolist(Rest), + {List, Rem} = declist(Rest), {{list, List}, Rem}; %% Dict bdecode([Char | Rest]) when Char == $d -> - {Dict, Rem} = dodict(Rest), + {Dict, Rem} = decdict(Rest), {{dict, Dict}, Rem}. -dolist(Str) -> - dolist(Str, []). +declist(Str) -> + declist(Str, []). -dolist([Char | Rest], List) when Char == $e -> +declist([Char | Rest], List) when Char == $e -> {List, Rest}; -dolist(Str, List) -> +declist(Str, List) -> {Result, Rest} = bdecode(Str), - dolist(Rest, lists:append(List, [Result])). + declist(Rest, lists:append(List, [Result])). -dodict(Str) -> - dodict(Str, dict:new()). +decdict(Str) -> + decdict(Str, dict:new()). -dodict([Char | Rest], Dict) when Char == $e -> +decdict([Char | Rest], Dict) when Char == $e -> {Dict, Rest}; -dodict(Str, Dict) -> +decdict(Str, Dict) -> {{string, Key}, Rest} = bdecode(Str), {Val, Rest2} = bdecode(Rest), - dodict(Rest2, dict:store(Key, Val, Dict)). - + decdict(Rest2, dict:store(Key, Val, Dict)). |
