Current section

Files

Jump to
yog src yog@internal@examples@task_ordering.erl
Raw

src/yog@internal@examples@task_ordering.erl

-module(yog@internal@examples@task_ordering).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/yog/internal/examples/task_ordering.gleam").
-export([main/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-file("src/yog/internal/examples/task_ordering.gleam", 59).
?DOC(false).
-spec char_to_ascii(binary()) -> integer().
char_to_ascii(S) ->
Codepoint@1 = case begin
_pipe = gleam@string:to_utf_codepoints(S),
gleam@list:first(_pipe)
end of
{ok, Codepoint} -> Codepoint;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"yog/internal/examples/task_ordering"/utf8>>,
function => <<"char_to_ascii"/utf8>>,
line => 60,
value => _assert_fail,
start => 1551,
'end' => 1619,
pattern_start => 1562,
pattern_end => 1575})
end,
gleam_stdlib:identity(Codepoint@1).
-file("src/yog/internal/examples/task_ordering.gleam", 8).
?DOC(false).
-spec main() -> nil.
main() ->
Dependencies = [{<<"C"/utf8>>, <<"A"/utf8>>},
{<<"C"/utf8>>, <<"F"/utf8>>},
{<<"A"/utf8>>, <<"B"/utf8>>},
{<<"A"/utf8>>, <<"D"/utf8>>},
{<<"B"/utf8>>, <<"E"/utf8>>},
{<<"D"/utf8>>, <<"E"/utf8>>},
{<<"F"/utf8>>, <<"E"/utf8>>}],
Graph = begin
_pipe = Dependencies,
gleam@list:fold(
_pipe,
yog@model:new(directed),
fun(G, Dep) ->
{Prereq, Step} = Dep,
Prereq_id = char_to_ascii(Prereq),
Step_id = char_to_ascii(Step),
_pipe@1 = G,
_pipe@2 = yog@model:add_node(_pipe@1, Prereq_id, Prereq),
_pipe@3 = yog@model:add_node(_pipe@2, Step_id, Step),
yog@model:add_edge(_pipe@3, Prereq_id, Step_id, nil)
end
)
end,
case yog@traversal:lexicographical_topological_sort(
Graph,
fun gleam@string:compare/2
) of
{ok, Order} ->
Task_order = begin
_pipe@4 = Order,
_pipe@5 = gleam@list:map(
_pipe@4,
fun(Id) ->
Task@1 = case gleam_stdlib:map_get(
erlang:element(3, Graph),
Id
) of
{ok, Task} -> Task;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"yog/internal/examples/task_ordering"/utf8>>,
function => <<"main"/utf8>>,
line => 47,
value => _assert_fail,
start => 1232,
'end' => 1279,
pattern_start => 1243,
pattern_end => 1251})
end,
Task@1
end
),
gleam@string:join(_pipe@5, <<""/utf8>>)
end,
gleam_stdlib:println(
<<"Task execution order: "/utf8, Task_order/binary>>
);
{error, nil} ->
gleam_stdlib:println(<<"Circular dependency detected!"/utf8>>)
end.