package body Halstead_Operator is

    function Is_Equal
                (Left : in Definition; Right : in Definition) return Boolean is
    begin
        -- Is_Equal

        if Left.Kind = Literal and Right.Kind = Literal then

            return Dyn.Str (Left.Value) = Dyn.Str (Right.Value);

        else

            return Operator_Kind'Image (Left.Kind) =
                      Operator_Kind'Image (Right.Kind);

        end if;

    end Is_Equal;

    --** changed 11/18/85 by J. Margono
    --** reason: logic error
    function "<" (Left : in Definition; Right : in Definition) return Boolean is
    begin
        -- "<"

        if Left.Kind = Literal and Right.Kind = Literal then

            return Dyn.Str (Left.Value) < Dyn.Str (Right.Value);

        elsif Left.Kind /= Literal and Right.Kind = Literal then

            return Operator_Kind'Image (Left.Kind) < Dyn.Str (Right.Value);

        elsif Left.Kind = Literal and Right.Kind /= Literal then

            return Dyn.Str (Left.Value) < Operator_Kind'Image (Right.Kind);

        else
            -- Left.Kind /= Literal and Right.Kind /= Literal then

            return Operator_Kind'Image (Left.Kind) <
                      Operator_Kind'Image (Right.Kind);

        end if;

    end "<";


    function Convert (This_String : in String) return Definition is
        -- converts string to operator
    begin
        -- Convert

        return (Kind => Literal, Value => Dyn.D_String (Str => This_String));

    end Convert;

end Halstead_Operator;