aboutsummaryrefslogblamecommitdiffstats
path: root/src/comparable
blob: 14a049051a7b6117d37fd729b3089925b2844595 (plain) (tree)
1
2

                      















                                                                             

                      

         
            





                                           
                           




                                                    



                                                 

















                           

                                     

                                         
                                


                                             


















                                                  

                                 



                                                       



                                     




















                                          












                                                           


















                           








                                                                         




                                          
# -*- shell-script -*-

# Copyright © 2014  Mattias Andrée (maandree@member.fsf.org)
# 
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
# 
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


Telement="${T}"
Tarray="${Telement}[]"
Tparam=""
Targ=""
Targ_name=""
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"
	Targ_name=", 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> "
	    Telement="Comparable<T>"
	    Tarray="${Telement}[]"
	else
	    Tparam="<T extends Comparable<? super T>> "
	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
if [[ "${T}" = @(boolean|char|byte|short|int|long|float|double) ]]; then 
    function equal
    {   echo "($1) == ($2)"
    }
else
    function equal
    {   echo "($1).equals($2)"
    }
fi
function fun
{
    echo "${Tparam}${1} ${2}(${3}${Targ})"
}