diff --git a/src/erldev.erl b/src/erldev.erl index 9ffacc9..e7a041d 100644 --- a/src/erldev.erl +++ b/src/erldev.erl @@ -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, diff --git a/src/ezic_compile.erl b/src/ezic_compile.erl deleted file mode 100644 index 6dbe982..0000000 --- a/src/ezic_compile.erl +++ /dev/null @@ -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. - - diff --git a/src/ezic_date.erl b/src/ezic_date.erl index 5c6bb57..ab6d85c 100644 --- a/src/ezic_date.erl +++ b/src/ezic_date.erl @@ -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{}}) -> diff --git a/src/ezic_db.erl b/src/ezic_db.erl index 61a31f1..17250af 100644 --- a/src/ezic_db.erl +++ b/src/ezic_db.erl @@ -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) -> diff --git a/src/ezic_record.erl b/src/ezic_record.erl index a803799..c36bd16 100644 --- a/src/ezic_record.erl +++ b/src/ezic_record.erl @@ -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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/ezic_rule.erl b/src/ezic_rule.erl index df12ba7..9436326 100644 --- a/src/ezic_rule.erl +++ b/src/ezic_rule.erl @@ -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). diff --git a/src/ezic_zone.erl b/src/ezic_zone.erl index e9e921e..aeb233a 100644 --- a/src/ezic_zone.erl +++ b/src/ezic_zone.erl @@ -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).