diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-01-16 12:13:05 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-01-16 12:13:05 +0000 |
commit | 3db12e8b236ac8f88db8eb4690d10e4a3b8dbcd4 (patch) | |
tree | b3c086e437cab449f90ba637710daed0ddfec4c4 /compar.c | |
parent | 392296c12de9d7f9be03a8205250ba0844cb9d38 (diff) | |
download | ruby-3db12e8b236ac8f88db8eb4690d10e4a3b8dbcd4.tar.gz |
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.c | 100 |
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("<=>"); +} |