-module(akh_source_map).
-include("akh_source_map.hrl").
-export([
    empty/0,
    insert/3,
    get_loc/2
]).

-spec empty() -> source_map().
empty() -> gb_trees:empty().

-spec insert(Offset :: non_neg_integer(), Line :: pos_integer(), source_map()) ->
    source_map().
insert(Offset, Line, SourceMap) -> gb_trees:insert(Offset, Line, SourceMap).

-spec get_loc(Offset :: non_neg_integer(), source_map()) -> #loc{}.
get_loc(Offset, SourceMap) ->
    case gb_trees:smaller(Offset, SourceMap) of
        {Start, Line} -> #loc{line = Line, col = Offset - Start - 1};
        none -> #loc{line = 0, col = Offset}
    end.