Packages

The Phi Programming Language

Current section

Files

Jump to
phi stdlib Data Ord.erl
Raw

stdlib/Data/Ord.erl

%%---------------------------------------------------------------------------
%% |
%% Module : Ord
%% Copyright : (c) 2020-2021 EMQ Technologies Co., Ltd.
%% License : BSD-style (see the LICENSE file)
%%
%% Maintainer : Feng Lee, feng@emqx.io
%% Yang M, yangm@emqx.io
%% Stability : experimental
%% Portability : portable
%%
%% The Ord FFI module.
%%
%%---------------------------------------------------------------------------
-module('Data.Ord.FFI').
-export([ cmpAtomImpl/3
, cmpBoolImpl/3
, cmpBinImpl/3
, cmpCharImpl/3
, cmpIntImpl/3
, cmpFloatImpl/3
, cmpStringImpl/3
]).
cmpAtomImpl(LT, EQ, GT) ->
fun(A1) -> fun(A2) -> cmp(LT, EQ, GT, A1, A2) end end.
cmpBoolImpl(LT, EQ, GT) ->
fun(B1) -> fun(B2) -> cmp(LT, EQ, GT, B1, B2) end end.
cmpBinImpl(LT, EQ, GT) ->
fun(B1) -> fun(B2) -> cmp(LT, EQ, GT, B1, B2) end end.
cmpCharImpl(LT, EQ, GT) ->
fun (C1) -> fun(C2) -> cmp(LT, EQ, GT, C1, C2) end end.
cmpIntImpl(LT, EQ, GT) ->
fun(I1) -> fun(I2) -> cmp(LT, EQ, GT, I1, I2) end end.
cmpFloatImpl(LT, EQ, GT) ->
fun(F1) -> fun(F2) -> cmp(LT, EQ, GT, F1, F2) end end.
cmpStringImpl(LT, EQ, GT) ->
fun(S1) -> fun(S2) -> cmp(LT, EQ, GT, S1, S2) end end.
-compile({inline, [cmp/5]}).
cmp(LT, EQ, GT, X, Y) ->
if X > Y -> GT;
X < Y -> LT;
true -> EQ
end.