[#33567] rational, complex and nuby — Tadayoshi Funaba <tadf@...>

ruby に rational と complex を組みこもうと試していて nuby という派生物

21 messages 2008/02/02

[#33580] Re: cgi.rb再構築案 — "Makoto Kuwata" <kwa@...>

桑田といいます。

17 messages 2008/02/03

[#33611] Solaris で timeout.rb が Segmentation fault する。 — shiiya@...

はじめまして。椎屋と申します。

15 messages 2008/02/06
[#33612] Re: Solaris で timeout.rb が Segmentation fault する。 — Nobuyoshi Nakada <nobu@...> 2008/02/06

なかだです。

[#33613] Re: Solaris で timeout.rb が Segmentation fault する。 — shiiya yoshitaka <shiiya@...> 2008/02/06

椎屋です。反応ありがとうございます。

[#33650] Re: Solaris で timeout.rb が Segmentation fault する。 — Nobuyoshi Nakada <nobu@...> 2008/02/08

なかだです。

[#33652] Re: Solaris で timeout.rb が Segmentation fault する。 — SATOH Fumiyasu <fumiyas@...> 2008/02/08

さとうふみやす @ OSS テクノロジです。

[#33621] EUC-KR <-> UTF-8 transition table — "Park Ji-In" <tisphie@...>

朴 芝印です。

15 messages 2008/02/06

[#33628] encdet.rb — Tanaka Akira <akr@...>

前から考えていたのですが、ファイル先頭の magic comment や

18 messages 2008/02/07

[#33662] rational, complex and mathn — Tadayoshi Funaba <tadf@...>

rational は floor、truncate、ceil、round を定義していません。Numeric

66 messages 2008/02/08
[#33663] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/08

他にも問題、課題はあると思います。すぐに解決できるものと、そうでないも

[#33664] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/08

ひとつ書き忘れました。

[#33707] Re: rational, complex and mathn — Yukihiro Matsumoto <matz@...> 2008/02/12

まつもと ゆきひろです

[#33714] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/12

> 原さんのrationalは導入予定がありますので、この機会にもう一度

[#33727] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/13

原です。

[#33761] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/13

> 前にふなばさんと個人的なメールのやりとりで、結局また私がrationalをまと

[#33788] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/15

原です。

[#33795] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/15

> > それなりに速くはなるし、単純なところでそれなりに満足していますが、一度、

[#33806] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/16

nurat 0.0.2 を出しました (ついでに nucomp も)。

[#33812] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/16

仕様を確認していきたいと思います。

[#33815] Re: rational, complex and mathn — Yukihiro Matsumoto <matz@...> 2008/02/16

まつもと ゆきひろです

[#33818] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/16

原です。

[#33819] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/17

> > new!はRubyで実装しているためにだけ必要なので、Cで実装するな

[#33821] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/17

> Rational() は、1つか2つの引数をとる。

[#33827] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/17

> 実際的に重要な機能が Rational() という名前で固定されるのはクラスの定義

[#33845] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/18

もうあまり手を入れないでおこうと思ったのです、つい手を入れてしまいまし

[#33886] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/21

ちょっと実験してみました。原さんの rational は、かけ算割り算が速いので、

[#33888] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/21

で、考えていたんですが、目的は、最速の rational を作ることではなくて、

[#33903] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/22

原です。

[#33905] Re: rational, complex and mathn — "NARUSE, Yui" <naruse@...> 2008/02/22

成瀬です。

[#33908] Re: rational, complex and mathn — Yukihiro Matsumoto <matz@...> 2008/02/22

まつもと ゆきひろです

[#33914] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/23

> はい。Complexについても1.9の間に組み込んでよいと思います。

[#33679] bigdecimal — Tadayoshi Funaba <tadf@...>

bigdecimal/math.rb の BigMath は、利用者が include してつかうことを前

23 messages 2008/02/09
[#33680] Re: bigdecimal — Tadayoshi Funaba <tadf@...> 2008/02/09

Integer や Float に比べると、BigDicimal() は、1 や 1.1 を受けつけない、

[#33686] Re: bigdecimal — Tadashi Saito <shiba@...2.accsnet.ne.jp> 2008/02/10

斎藤と申します。

[#33698] Re: bigdecimal — Tadayoshi Funaba <tadf@...> 2008/02/11

> 仮にBigDecimal(1.1)を、(二進小数として)受け付けると、「BigDecimalでは、

[#33705] Re: bigdecimal — Yukihiro Matsumoto <matz@...> 2008/02/12

まつもと ゆきひろです

[#33726] Re: [ruby-cvs:22680] Ruby:r15443 (trunk): * bootstraptest/runner.rb, bootstraptest/test_method.rb, enc/depend, — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

14 messages 2008/02/13
[#33730] Re: [ruby-cvs:22680] Ruby:r15443 (trunk): * bootstraptest/runner.rb, bootstraptest/test_method.rb, enc/depend, — "NARUSE, Yui" <naruse@...> 2008/02/13

成瀬です。

[#33889] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Urabe Shyouhei <shyouhei@...>

卜部です。ちょっとお知恵を拝借したく。

22 messages 2008/02/21
[#33892] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Nobuyoshi Nakada <nobu@...> 2008/02/21

なかだです。

[#33909] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Urabe Shyouhei <shyouhei@...> 2008/02/22

Nobuyoshi Nakada さんは書きました:

[#36081] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — TOYOFUKU Chikanobu <nobu_toyofuku@...> 2008/09/01

豊福です。

[#36085] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Yukihiro Matsumoto <matz@...> 2008/09/01

まつもと ゆきひろです

[ruby-dev:33751] Re: HashからStructを作る

From: Nobuyoshi Nakada <nobu@...>
Date: 2008-02-13 06:17:06 UTC
List: ruby-dev #33751
なかだです。

At Wed, 13 Feb 2008 13:07:52 +0900,
rubikitch@ruby-lang.org wrote in [ruby-dev:33734]:
> あるいは、Hashのキーを固定する(追加不可能、存在しないキーにアクセスしたら例外)
> メソッドを作成できないものでしょうか?
> Hash#fix_keys, Hash#freeze_keys, Hash#fix, Hash#lock, Hash#pin, Hash#fixate…

ためしに作ってみました。fix!,unfix!,fixed?を追加、[],[]=,delete
で存在しないキーにアクセスしたらKeyErrorを発生します。
initialize,shift,clear,delete_ifなどの単独でキーを指定するのでな
いものは例外にはなりません。これだとfixというのとはちょっとイメー
ジが違うような気がしますが。


Index: hash.c
===================================================================
--- hash.c	(revision 15455)
+++ hash.c	(working copy)
@@ -25,4 +25,5 @@ static VALUE rb_hash_s_try_convert(VALUE
 #define HASH_DELETED  FL_USER1
 #define HASH_PROC_DEFAULT FL_USER2
+#define HASH_FIXED    FL_USER3
 
 VALUE
@@ -426,4 +427,25 @@ rb_hash_rehash(VALUE hash)
 }
 
+VALUE
+rb_hash_fix(VALUE hash)
+{
+    FL_SET(hash, HASH_FIXED);
+    return hash;
+}
+
+VALUE
+rb_hash_unfix(VALUE hash)
+{
+    FL_UNSET(hash, HASH_FIXED);
+    return hash;
+}
+
+VALUE
+rb_hash_fixed_p(VALUE hash)
+{
+    if (FL_TEST(hash, HASH_FIXED)) return Qtrue;
+    return Qfalse;
+}
+
 /*
  *  call-seq:
@@ -446,4 +468,7 @@ rb_hash_aref(VALUE hash, VALUE key)
 
     if (!RHASH(hash)->ntbl || !st_lookup(RHASH(hash)->ntbl, key, &val)) {
+	if (FL_TEST(hash, HASH_FIXED)) {
+	    rb_raise(rb_eKeyError, "key not found");
+	}
 	return rb_funcall(hash, id_default, 1, key);
     }
@@ -683,12 +708,17 @@ VALUE
 rb_hash_delete(VALUE hash, VALUE key)
 {
-    VALUE val;
+    VALUE val = Qundef;
 
-    rb_hash_modify(hash);
-    val = rb_hash_delete_key(hash, key);
+    rb_hash_modify_check(hash);
+    if (RHASH(hash)->ntbl) {
+	val = rb_hash_delete_key(hash, key);
+    }
     if (val != Qundef) return val;
     if (rb_block_given_p()) {
 	return rb_yield(key);
     }
+    else if (FL_TEST(hash, HASH_FIXED)) {
+	rb_raise(rb_eKeyError, "key not found");
+    }
     return Qnil;
 }
@@ -736,8 +766,10 @@ rb_hash_shift(VALUE hash)
     struct shift_var var;
 
-    rb_hash_modify(hash);
+    rb_hash_modify_check(hash);
     var.key = Qundef;
-    rb_hash_foreach(hash, RHASH(hash)->iter_lev > 0 ? shift_i_safe : shift_i,
-		    (st_data_t)&var);
+    if (RHASH(hash)->ntbl) {
+	rb_hash_foreach(hash, RHASH(hash)->iter_lev > 0 ? shift_i_safe : shift_i,
+			(st_data_t)&var);
+    }
 
     if (var.key != Qundef) {
@@ -929,10 +961,14 @@ VALUE
 rb_hash_aset(VALUE hash, VALUE key, VALUE val)
 {
-    rb_hash_modify(hash);
-    if (TYPE(key) != T_STRING || st_lookup(RHASH(hash)->ntbl, key, 0)) {
-	st_insert(RHASH(hash)->ntbl, key, val);
+    rb_hash_modify_check(hash);
+    if (TYPE(key) != T_STRING ||
+	(RHASH(hash)->ntbl && st_lookup(RHASH(hash)->ntbl, key, 0))) {
+	st_insert(rb_hash_tbl(hash), key, val);
     }
     else {
-	st_add_direct(RHASH(hash)->ntbl, rb_str_new4(key), val);
+	if (FL_TEST(hash, HASH_FIXED)) {
+	    rb_raise(rb_eKeyError, "can't insert into fixed hash");
+	}
+	st_add_direct(rb_hash_tbl(hash), rb_str_new4(key), val);
     }
     return val;
@@ -2613,4 +2649,8 @@ Init_Hash(void)
     rb_define_method(rb_cHash,"compare_by_identity?", rb_hash_compare_by_id_p, 0);
 
+    rb_define_method(rb_cHash,"fix!", rb_hash_fix, 0);
+    rb_define_method(rb_cHash,"unfix!", rb_hash_unfix, 0);
+    rb_define_method(rb_cHash,"fixed?", rb_hash_fixed_p, 0);
+
 #ifndef __MACOS__ /* environment variables nothing on MacOS. */
     origenviron = environ;


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread