aboutsummaryrefslogtreecommitdiffstats
path: root/compar.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-01-16 12:13:05 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-01-16 12:13:05 +0000
commit3db12e8b236ac8f88db8eb4690d10e4a3b8dbcd4 (patch)
treeb3c086e437cab449f90ba637710daed0ddfec4c4 /compar.c
parent392296c12de9d7f9be03a8205250ba0844cb9d38 (diff)
downloadruby-3db12e8b236ac8f88db8eb4690d10e4a3b8dbcd4.tar.gz
Initial revisionv1_0_r2
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compar.c')
-rw-r--r--compar.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/compar.c b/compar.c
new file mode 100644
index 0000000000..e852fb1e49
--- /dev/null
+++ b/compar.c
@@ -0,0 +1,100 @@
+/************************************************
+
+ compar.c -
+
+ $Author$
+ $Date$
+ created at: Thu Aug 26 14:39:48 JST 1993
+
+ Copyright (C) 1993-1996 Yukihiro Matsumoto
+
+************************************************/
+
+#include "ruby.h"
+
+VALUE mComparable;
+
+static ID cmp;
+
+static VALUE
+cmp_eq(x, y)
+ VALUE x, y;
+{
+ VALUE c = rb_funcall(x, cmp, 1, y);
+ int t = NUM2INT(c);
+
+ if (t == 0) return TRUE;
+ return FALSE;
+}
+
+static VALUE
+cmp_gt(x, y)
+ VALUE x, y;
+{
+ VALUE c = rb_funcall(x, cmp, 1, y);
+ int t = NUM2INT(c);
+
+ if (t > 0) return TRUE;
+ return FALSE;
+}
+
+static VALUE
+cmp_ge(x, y)
+ VALUE x, y;
+{
+ VALUE c = rb_funcall(x, cmp, 1, y);
+ int t = NUM2INT(c);
+
+ if (t >= 0) return TRUE;
+ return FALSE;
+}
+
+static VALUE
+cmp_lt(x, y)
+ VALUE x, y;
+{
+ VALUE c = rb_funcall(x, cmp, 1, y);
+ int t = NUM2INT(c);
+
+ if (t < 0) return TRUE;
+ return FALSE;
+}
+
+static VALUE
+cmp_le(x, y)
+ VALUE x, y;
+{
+ VALUE c = rb_funcall(x, cmp, 1, y);
+ int t = NUM2INT(c);
+
+ if (t <= 0) return TRUE;
+ return FALSE;
+}
+
+static VALUE
+cmp_between(x, min, max)
+ VALUE x, min, max;
+{
+ VALUE c = rb_funcall(x, cmp, 1, min);
+ int t = NUM2INT(c);
+ if (t < 0) return FALSE;
+
+ c = rb_funcall(x, cmp, 1, max);
+ t = NUM2INT(c);
+ if (t > 0) return FALSE;
+ return TRUE;
+}
+
+void
+Init_Comparable()
+{
+ mComparable = rb_define_module("Comparable");
+ rb_define_method(mComparable, "==", cmp_eq, 1);
+ rb_define_method(mComparable, ">", cmp_gt, 1);
+ rb_define_method(mComparable, ">=", cmp_ge, 1);
+ rb_define_method(mComparable, "<", cmp_lt, 1);
+ rb_define_method(mComparable, "<=", cmp_le, 1);
+ rb_define_method(mComparable, "between?", cmp_between, 2);
+
+ cmp = rb_intern("<=>");
+}