%%%------------------------------------------------------------------- %%% @author cheese %%% @copyright (C) 2014, %%% @doc %%% %%% @end %%% Created : 10. Dec 2014 2:21 PM %%%------------------------------------------------------------------- -module(protocol_iso_utilites). -author("cheese"). -include("../../include/types_finance_protocol.hrl"). %% API -export([get_field/2, set_field/2, prepare_data_string_to_bcd/1]). %% Internal Functions -export([internal_set_field/3]). -spec(get_field([#iso_field{}], integer()) -> #iso_field{}). get_field([], _Idx) -> undefined; get_field([#iso_field{pos = Idx} = F | _Tail], Idx) -> F; get_field([_Head | Tail], Idx) -> get_field(Tail, Idx). -spec(set_field([#iso_field{}], #iso_field{}) -> #iso_field{}). set_field(AllFields, Field) -> internal_set_field(AllFields, [], Field). %%====================================================================================================================== internal_set_field([], Res, Field) -> Res ++ [Field]; internal_set_field([#iso_field{pos = Idx} | Res], Head, #iso_field{pos = Idx} = Field) -> Head ++ [Field] ++ Res; internal_set_field([#iso_field{pos = IdxBefore} = FBefore | Tail], Res, #iso_field{pos = Idx} = Field) when IdxBefore > Idx -> Res ++ [Field] ++ [FBefore] ++ Tail; internal_set_field([Head | Tail], Res, Field) -> internal_set_field(Tail, Res ++ [Head], Field). -spec(prepare_data_string_to_bcd(string()) -> binary()). prepare_data_string_to_bcd(String) -> bytes_extension:int_to_bcd(list_to_integer(String)).