aboutsummaryrefslogblamecommitdiffstats
path: root/src/comparable
blob: 0d3c21eb5408d4d9ddd0d2674b6ff9ab5a4a3fb4 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12

                      

                      







                                           
                           




                                                    



                                                 

















                           

                                     

                                         


                                             


















                                                  











                                                       




















                                          












                                                           























                                          
# -*- shell-script -*-

Telement="${T}"
Tarray="${Telement}[]"
Tparam=""
Targ=""
function T-array
{
    elems=""
    for elem in "$@"; do
	elems="${elems:+${elems}, }${elem}"
    done
    if [ "${T}" = T ]; then
	echo "((${T}[])(new Object[] { ${elems} }))"
    else
	echo "(new ${T}[] { ${elems} })"
    fi
}
if [ "${T}" = boolean ]; then
    function cmp
    {   echo "(($1) == ($2) ? 0 : ($1) ? 1 : -1)"
    }
    function greater
    {   echo "($1) & !($2)"
    }
    function greater=
    {   echo "($1) | !($2)"
    }
    function =
    {   echo "($1) == ($2)"
    }
    function not=
    {   echo "($1) ^ ($2)"
    }
    function less=
    {   echo "!($1) | ($2)"
    }
    function less
    {   echo "!($1) & ($2)"
    }
elif [[ "${T}" = @(T|T+|T++) ]]; then
    if [ "${T}" = T ]; then
	Tparam="<T> "
	Targ=", Comparator<T> comparator"
	function cmp
	{   echo "comparator.compare($1, $2)"
	}
	function greater
	{   echo "comparator.compare($1, $2) > 0"
	}
	function greater=
	{   echo "comparator.compare($1, $2) >= 0"
	}
	function =
	{   echo "comparator.compare($1, $2) == 0"
	}
	function not=
	{   echo "comparator.compare($1, $2) != 0"
	}
	function less=
	{   echo "comparator.compare($1, $2) <= 0"
	}
	function less
	{   echo "comparator.compare($1, $2) < 0"
	}
    else
	if [ "${T}" = T++ ]; then
	    Tparam="<T> "
	    Targ=""
	    Telement="Comparable<T>"
	    Tarray="${Telement}[]"
	else
	    Tparam="<T extends Comparable<? super T>> "
	    Targ=""
	fi
	function cmp
	{   echo "($1).compareTo($2)"
	}
	function greater
	{   echo "($1).compareTo($2) > 0"
	}
	function greater=
	{   echo "($1).compareTo($2) >= 0"
	}
	function =
	{   echo "($1).compareTo($2) == 0"
	}
	function not=
	{   echo "($1).compareTo($2) != 0"
	}
	function less=
	{   echo "($1).compareTo($2) <= 0"
	}
	function less
	{   echo "($1).compareTo($2) < 0"
	}
	T=T
    fi
else
    if [ "${T}" = long ]; then
	function cmp
	{   echo "(int)(($1) - ($2) | ($1) - ($2) >> 32L)"
	}
    elif [[ "${T}" = @(float|double) ]]; then
	function cmp
	{   echo "(($1) < ($2) ? -1 : ($1) > ($2) ? 1 : 0)"
	}
    else
	function cmp
	{   echo "(($1) - ($2))"
	}
    fi
    function greater
    {   echo "($1) > ($2)"
    }
    function greater=
    {   echo "($1) >= ($2)"
    }
    function =
    {   echo "($1) == ($2)"
    }
    function not=
    {   echo "($1) != ($2)"
    }
    function less=
    {   echo "($1) <= ($2)"
    }
    function less
    {   echo "($1) < ($2)"
    }
fi
function fun
{
    echo "${Tparam}${1} ${2}(${3}${Targ})"
}