eliminated warnings. there were lots of unnecessary variables created in function parameters
This commit is contained in:
@@ -15,7 +15,7 @@ make_app([AppDirAtom]) ->
|
||||
Modules = get_modules(AppDir),
|
||||
AppSrc = try get_app_src(AppDir)
|
||||
catch error:{badmatch, _} ->
|
||||
io:format("Couldn't get AppSrcFile for ~p~n", [AppDir]),
|
||||
% io:format("Couldn't get AppSrcFile for ~p~n", [AppDir]),
|
||||
erlang:halt()
|
||||
end,
|
||||
{application, Name, Opts} = AppSrc,
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
-module(ezic_compile).
|
||||
-include("include/ezic.hrl").
|
||||
|
||||
-export([flatten/2, separate/1, zone_sorter/2]).
|
||||
|
||||
|
||||
|
||||
% @todo figure out what to do with leap seconds
|
||||
|
||||
|
||||
|
||||
|
||||
separate(Records) ->
|
||||
Zones= [Z || Z=#zone{} <- Records],
|
||||
Rules= [Z || Z=#rule{} <- Records],
|
||||
Leaps= [Z || Z=#leap{} <- Records],
|
||||
Links= [Z || Z=#link{} <- Records],
|
||||
{ok, Zones, Rules, Leaps, Links}.
|
||||
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% FLATTENING PSEUDOCODE
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% args: Zones, Rules
|
||||
%
|
||||
% take the first zone, get all zones with the same name
|
||||
% sort them by ascending date (oldest first)
|
||||
% foreach zone:
|
||||
% find all rules between start (if exists) & end (if exists) of zone
|
||||
% foreach rule:
|
||||
% create a #flatzone
|
||||
% flatten the rest of the zones
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
|
||||
flatten(Zones, Rules) ->
|
||||
% ?debug("Rules: ~p", [Rules]),
|
||||
flatten(Zones, Rules, []).
|
||||
|
||||
% note: recursive
|
||||
flatten([], _, Flats) ->
|
||||
Flats;
|
||||
flatten(Zones, Rules, Flats) ->
|
||||
[Zone | _] = Zones,
|
||||
% ?debug("Zone: ~p", [Zone]),
|
||||
?debug("Flattening: ~p", [Zone#zone.name]),
|
||||
|
||||
{ZoneSet, RestZones} = lists:splitwith(make_zone_filter(Zone), Zones),
|
||||
% ?debug("ZoneSet: ~p", [ZoneSet]),
|
||||
|
||||
|
||||
NeededRules= lists:filter(make_rule_zone_filter(ZoneSet), Rules),
|
||||
% ?debug("NeededRules: ~p", [NeededRules]),
|
||||
|
||||
SortedZoneSet= lists:sort(fun zone_sorter/2, ZoneSet),
|
||||
|
||||
NewFlats= lists:append(flatten_set(SortedZoneSet, NeededRules), Flats),
|
||||
% ?debug("Sorted Zones: ~p", [SortedZoneSet]),
|
||||
|
||||
flatten(RestZones, Rules, NewFlats).
|
||||
|
||||
|
||||
|
||||
|
||||
zone_sorter(#zone{until=U1}, #zone{until=U2}) ->
|
||||
ezic_date:compare_datetimes(U1, U2).
|
||||
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% INTERNAL
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
|
||||
% filter generators
|
||||
make_zone_filter(#zone{name=Name}) ->
|
||||
fun(#zone{name=N}) when Name=:=N-> true; (_)->false end.
|
||||
|
||||
|
||||
make_rule_zone_filter(ZoneSet) ->
|
||||
ZS= sets:from_list([Z#zone.rule || Z<-ZoneSet]),
|
||||
% ?debug("~n\t ZoneSetRules: ~p", [sets:to_list(ZS)]),
|
||||
fun(#rule{name=R})->
|
||||
sets:is_element(R, ZS)
|
||||
end.
|
||||
|
||||
|
||||
% accepts a rule, and returns true if it exists between the two years given
|
||||
make_rule_time_filter(D1, D2) ->
|
||||
fun(#rule{from=F, to=T}) ->
|
||||
ezic_date:overlap({D1,D2}, {F,T})
|
||||
end.
|
||||
|
||||
|
||||
|
||||
flatten_set(ZoneSet, Rules) ->
|
||||
flatten_set(ZoneSet, Rules, none, []).
|
||||
|
||||
% note: recursive
|
||||
flatten_set([], _, _, Flats) ->
|
||||
Flats;
|
||||
flatten_set(ZoneSet, Rules, Prev, Flats) ->
|
||||
[Zone|Rest] = ZoneSet,
|
||||
|
||||
NewFlats= lists:append(flatten_one(Zone, Prev, Rules), Flats),
|
||||
flatten_set(Rest, Rules, Zone, NewFlats).
|
||||
|
||||
|
||||
|
||||
flatten_one(Zone=#zone{until=Until}, none, Rules) ->
|
||||
NeededRules= lists:filter(make_rule_time_filter(minimum, Until), Rules),
|
||||
lists:map(fun(R)-> flatten_each(Zone, R, minimum) end, NeededRules);
|
||||
flatten_one(Zone=#zone{until=UTo}, NextZone=#zone{until=UFrom}, Rules) ->
|
||||
NeededRules= lists:filter(make_rule_time_filter(UFrom, UTo), Rules),
|
||||
lists:map(fun(R)-> flatten_each(Zone, R, UFrom) end, NeededRules).
|
||||
|
||||
|
||||
flatten_each(Zone, Rule, From) ->
|
||||
% ?debug("flatten_each: ~n\tZone: ~p~n\tRule: ~p~n\tFrom: ~p", [Zone, Rule, From]),
|
||||
% erlang:error(dbg),
|
||||
not_done.
|
||||
|
||||
|
||||
|
||||
|
||||
next_zone([]) ->
|
||||
none;
|
||||
next_zone([H|T]) ->
|
||||
H.
|
||||
|
||||
|
||||
@@ -115,9 +115,9 @@ compare_datetimes_normal(current, current) -> true;
|
||||
compare_datetimes_normal(current, _) -> false;
|
||||
compare_datetimes_normal(_,current) -> true;
|
||||
|
||||
compare_datetimes_normal({D1, T1}, {D2, T2}) when D1 < D2 ->
|
||||
compare_datetimes_normal({D1, _}, {D2, _}) when D1 < D2 ->
|
||||
true;
|
||||
compare_datetimes_normal({D1, T1}, {D2, T2}) when D1 > D2 ->
|
||||
compare_datetimes_normal({D1, _}, {D2, _}) when D1 > D2 ->
|
||||
false;
|
||||
compare_datetimes_normal({_, T1}, {_, T2}) ->
|
||||
compare_times(T1, T2).
|
||||
@@ -153,12 +153,12 @@ normalize({Y,M,{last, D}}) ->
|
||||
{Date, #tztime{}};
|
||||
|
||||
|
||||
normalize({Date={Y,M,D},Time={H,_,_}}) when is_integer(H) ->
|
||||
normalize({Date={_,_,_},Time={H,_,_}}) when is_integer(H) ->
|
||||
{Date, #tztime{time=Time}};
|
||||
|
||||
normalize({Date={Y,M,D}, Tz=#tztime{}}) when is_integer(D) ->
|
||||
normalize({Date={_,_,D}, Tz=#tztime{}}) when is_integer(D) ->
|
||||
{Date, Tz};
|
||||
normalize({{Y,M,TzOn=#tzon{day=Day, filter=Filter}}, Tz=#tztime{}}) ->
|
||||
normalize({{Y,M,#tzon{day=Day, filter=Filter}}, Tz=#tztime{}}) ->
|
||||
Date= first_day_limited(Day, Filter, Y,M),
|
||||
{Date, Tz};
|
||||
normalize({{Y,M,{last, D}}, Tz=#tztime{}}) ->
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
-module(ezic_db).
|
||||
-include("include/ezic.hrl").
|
||||
-include_lib("stdlib/include/qlc.hrl").
|
||||
@@ -56,7 +57,7 @@ create_tabs(ok) ->
|
||||
%% {atomic, ok}= mnesia:create_table(link, [{disc_copies, [node()]},{attributes, record_info(fields, link)}]);
|
||||
|
||||
ok;
|
||||
create_tabs(E={error, {_, {already_exists,_}}}) ->
|
||||
create_tabs({error, {_, {already_exists,_}}}) ->
|
||||
mnesia:start(),
|
||||
ok;
|
||||
create_tabs(E) ->
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
-endif.
|
||||
|
||||
|
||||
-export([rule/1,zone/1,link/1,leap/1]).
|
||||
-export([rule/1,zone/1,link/1,leap/1, separate/1]).
|
||||
|
||||
|
||||
|
||||
@@ -42,16 +42,27 @@ link([From,To]) ->
|
||||
{ok, #link{from=From, to=To}}.
|
||||
|
||||
|
||||
% @todo figure out what must be done with leap seconds
|
||||
leap([YearS, MonthS, DayS, TimeS, Corr, RS]) ->
|
||||
Y=list_to_integer(YearS),
|
||||
M=ezic_date:month_to_num(MonthS),
|
||||
D=list_to_integer(DayS),
|
||||
Time=parse_abs_time(TimeS),
|
||||
{ok, #leap{datetime={{Y,M,D}, Time}}}.
|
||||
{ok, #leap{datetime={{Y,M,D}, Time}, corr=Corr, rs=RS}}.
|
||||
|
||||
|
||||
|
||||
|
||||
separate(Records) ->
|
||||
Zones= [Z || Z=#zone{} <- Records],
|
||||
Rules= [Z || Z=#rule{} <- Records],
|
||||
Leaps= [Z || Z=#leap{} <- Records],
|
||||
Links= [Z || Z=#link{} <- Records],
|
||||
{ok, Zones, Rules, Leaps, Links}.
|
||||
|
||||
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% PRIVATE
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
@@ -35,7 +35,7 @@ relevant(Now, Rule=#rule{from=F, to=T}) ->
|
||||
end.
|
||||
|
||||
|
||||
relevant2(Now, Rule=#rule{in=Month, on=Day, at=Time}) ->
|
||||
relevant2(Now, #rule{in=Month, on=Day, at=Time}) ->
|
||||
{{Y,_,_},_} = Now,
|
||||
RTime= {{Y, Month, Day}, Time},
|
||||
ezic_date:compare_datetimes(RTime, Now).
|
||||
|
||||
@@ -20,7 +20,7 @@ sort(#zone{until=U1}, #zone{until=U2}) ->
|
||||
revsort(Z1=#zone{}, Z2=#zone{}) ->
|
||||
not sort(Z1, Z2).
|
||||
|
||||
older_zone(Zone=#zone{until=Until}, Now) ->
|
||||
older_zone(#zone{until=Until}, Now) ->
|
||||
ezic_date:compare_datetimes(Until, Now).
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user