# Copyright (c) 2023 Yuki Kimoto
# MIT License

class EqualityChecker : interface_t {
  version_from SPVM;

  
  # Interface Methods
  required method : int ($object1 : object, $object2 : object);
  
  # Class Methods
  static method default_equality_checker : EqualityChecker () {
    
    my $default_equality_checker = method : int ($object1 : EqualityCheckable, $object2 : EqualityCheckable) {
      
      my $eq = 0;
      if ($object1 && $object2) {
        $eq = $object1->eq($object1, $object2);
      }
      elsif ($object1) {
        $eq = 0;
      }
      elsif ($object2) {
        $eq = 0;
      }
      else {
        $eq = 1;
      }
      
      return $eq;
    };
    
    return $default_equality_checker;
  }
  
}