# shellcheck shell=dash

___x_cmd log init time

xrc epoch

xrc:mod:lib     time        util stress log cmp

___x_cmd_time___main(){
    [ "$#" -gt 0 ] ||   set -- --help

    local op="$1";      shift
    case "$op" in
        -h|--help)      ___x_cmd help -m time       "$@" ;      return 0 ;;

        stress|log|cmp|\
        getms|getms_|getreal|getreal_|getrealms|getrealms_)
                        ___x_cmd_time_"${op}"       "$@" ;;

        --)             ___x_cmd_time_log           "$@" ;;
        *)              ___x_cmd_time_log    "$op"  "$@" ;;
    esac
}


___x_cmd_time_getms_(){
    {
        ___x_cmd_epoch_ms_;      local begin="$x_"
        "$@"
        ___x_cmd_epoch_ms_

        x_=$(( x_ - begin ))
    } >/dev/null 2>/dev/null
}

___x_cmd_time_getms(){
    local x_
    ___x_cmd_time_getms_ "$@"
    printf "%s\n" "$x_"
}


___x_cmd_time_getrealms(){
    {
        local x_
        ___x_cmd_epoch_real_; local begin="$x_"
        "$@" >/dev/null 2>/dev/null
        ___x_cmd_epoch_real_; local end="$x_"
    } >/dev/null 2>/dev/null

    ___x_cmd_cmds awk -v end="$end" -v begin="$begin" 'BEGIN{  printf("%-10.3f", (end-begin) * 1000 ) ; }'
}

___x_cmd_time_getrealms_(){
    x_="$(___x_cmd_time_getrealms "$@")"
}

___x_cmd_time_getreal(){
    {
        local x_
        ___x_cmd_epoch_real_; local begin="$x_"
        "$@"
        ___x_cmd_epoch_real_; local end="$x_"
    } >/dev/null 2>/dev/null

    ___x_cmd_cmds awk -v end="$end" -v begin="$begin" 'BEGIN{  printf("%-10.3f", (end-begin) ) ; }'
}

___x_cmd_time_getreal_(){
    x_="$(___x_cmd_time_getreal "$@")"
}

