%% Copyright 2011 Steve Davis % % Licensed under the Apache License, Version 2.0 (the "License"); % you may not use this file except in compliance with the License. % You may obtain a copy of the License at % % http://www.apache.org/licenses/LICENSE-2.0 % % Unless required by applicable law or agreed to in writing, software % distributed under the License is distributed on an "AS IS" BASIS, % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % See the License for the specific language governing permissions and % limitations under the License. -module(nqr_bits). -export([reverse/1, duplicate/2, append/1, bitlist/1, bitstring/1, stringbits/1]). %%-compile(export_all). reverse(Bin) -> reverse(Bin, <<>>). reverse(<>, Acc) -> reverse(Bin, <>); reverse(<<>>, Acc) -> Acc. %% duplicate(Bin, N) -> duplicate(Bin, N, <<>>). duplicate(Bin, N, Acc) when N > 0 -> duplicate(Bin, N - 1, <>); duplicate(_, 0, Acc) -> Acc. %% append(List) -> append(List, <<>>). append([H|T], Acc) -> append(T, <>); append([], Acc) -> Acc. %% bitlist(Bin) -> bitlist(Bin, []). bitlist(<>, Acc) -> bitlist(Bin, [X|Acc]); bitlist(<<>>, Acc) -> lists:reverse(Acc). %% bitstring(Bin) -> bitstring(Bin, <<>>). bitstring(<<0:1, Bin/bits>>, Acc) -> bitstring(Bin, <>); bitstring(<<1:1, Bin/bits>>, Acc) -> bitstring(Bin, <>); bitstring(<<>>, Acc) -> Acc. %% stringbits(Bin) -> stringbits(Bin, <<>>). stringbits(<<$0, Bin/binary>>, Acc) -> stringbits(Bin, <>); stringbits(<<$1, Bin/binary>>, Acc) -> stringbits(Bin, <>); stringbits(<<>>, Acc) -> Acc.