import java.lang.String;
import java.lang.Object;

public class Complex
  property "ilog.rules.engine.driver" "operator.ComplexDriver" {
  public int real;
  public int imaginary;
  // use a comment, as it may break because of operator /
  /* use the other kind of comment */
  public static Complex operator +(Complex c1, Complex c2);
  public static Complex operator -(Complex c1, Complex c2);
  public static Complex operator *(Complex c1, Complex c2);
  public static Complex operator /(Complex c1, Complex c2);
  public static Complex operator %(Complex c1, Complex c2);

  public static operator Complex(int real);
  public static operator Complex(java.lang.String f);
  public static Complex operator -(Complex c);
}

public class DBBool
  property "ilog.rules.engine.driver" "operator.DBBoolDriver"
{
   // The three possible DBBool values:
   public static final DBBool dbNull;
   public static final DBBool dbFalse;
   public static final DBBool dbTrue;
   // Private field that stores -1, 0, 1 for dbFalse, dbNull, dbTrue:
   public int value;

   // Private constructor. The value parameter must be -1, 0, or 1:
   DBBool(int value);

   // Implicit conversion from bool to DBBool. Maps true to
   // DBBool.dbTrue and false to DBBool.dbFalse:
   public static operator DBBool(boolean x);

   // Explicit conversion from DBBool to bool. Throws an
   // exception if the given DBBool is dbNull, otherwise returns
   // true or false:
   public static operator boolean(DBBool x);

   // Equality operator. Returns dbNull if either operand is dbNull,
   // otherwise returns dbTrue or dbFalse:
   public static DBBool operator ==(DBBool x, DBBool y);

   // Inequality operator. Returns dbNull if either operand is
   // dbNull, otherwise returns dbTrue or dbFalse:
   public static DBBool operator !=(DBBool x, DBBool y);

   // Logical negation operator. Returns dbTrue if the operand is
   // dbFalse, dbNull if the operand is dbNull, or dbFalse if the
   // operand is dbTrue:
   public static DBBool operator !(DBBool x);

   // Logical AND operator. Returns dbFalse if either operand is
   // dbFalse, dbNull if either operand is dbNull, otherwise dbTrue:
   public static DBBool operator &(DBBool x, DBBool y);

   // Logical OR operator. Returns dbTrue if either operand is
   // dbTrue, dbNull if either operand is dbNull, otherwise dbFalse:
   public static DBBool operator |(DBBool x, DBBool y);

   // Definitely true operator. Returns true if the operand is
   // dbTrue, false otherwise:
   public static boolean operator true(DBBool x);

   // Definitely false operator. Returns true if the operand is
   // dbFalse, false otherwise:
   public static boolean operator false(DBBool x);

   // Overload the conversion from DBBool to string:
   public static operator String(DBBool x);

   // Override the Object.Equals(object o) method:
   public boolean equals(Object o);

   // Override the Object.GetHashCode() method:
   public int hashCode();

   // Override the ToString method to convert DBBool to a string:
   public String toString();
}


public class MyDate
  property "ilog.rules.engine.driver" "operator.MyDateDriver"  {
  public long value;
  public static boolean operator ==(MyDate c1, MyDate c2);
  public static boolean operator !=(MyDate c1, MyDate c2);
  public static boolean operator >(MyDate c1, MyDate c2);
  public static boolean operator <(MyDate c1, MyDate c2);
  public static boolean operator >=(MyDate c1, MyDate c2);
  public static boolean operator <=(MyDate c1, MyDate c2);
}

public class MyFormat
  property "ilog.rules.engine.driver" "operator.MyFormatDriver" {
  public static java.lang.String format(java.lang.String pattern, java.lang.Object... arguments);
  public static java.lang.String format(java.util.Locale l, String pattern, java.lang.Object... arguments);
}