[#13727] Thread.critical=true and fork and exec — Kazuhiro NISHIYAMA <zn@...>
このような感じでforkとexecの間に必要のないIOを閉じようと
[#13754] Kconv(NKF) with tainted strings — Tietew <tietew@...>
Tietew といいます。
[#13765] GenerativeHash — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
まつもと ゆきひろです
高橋征義です。
TAKAHASHI Masayoshiさんの
高橋征義です。
[#13767] Dir::glob() — "Akinori MUSHA" <knu@...>
File::fnmatch の提案のときに切り離した、 Dir::glob の拡張を
[#13774] mkmf.rb: cleaning facility — Takaaki Tateishi <ttate@...>
立石です.
まつもと ゆきひろです
At Mon, 9 Jul 2001 15:20:28 +0900,
まつもと ゆきひろです
[#13779] dln.c patch for Mac OS X — Mitsuhiro Kondo <kondo@...>
こんにちは、近藤と申します。
[#13800] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — nobu.nakada@...
なかだです。
わたなべです。
まつもと ゆきひろです
わたなべです。
まつもと ゆきひろです
わたなべです。
まつもと ゆきひろです
At Tue, 10 Jul 2001 15:23:04 +0900,
わたなべです。
At Tue, 10 Jul 2001 16:50:52 +0900,
もうひとつあった。
At Tue, 10 Jul 2001 18:04:57 +0900,
まつもと ゆきひろです
At Mon, 16 Jul 2001 01:16:31 +0900,
まつもと ゆきひろです
At Mon, 16 Jul 2001 09:22:46 +0900,
まつもと ゆきひろです
[#13817] Fw: DOSISH file.c changes — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
なかだです。
[#13818] COPYING files — "Akinori MUSHA" <knu@...>
Ruby は GPL のシングルライセンスではないのに、 COPYING という
先日の:
高橋征義です。
[#13821] [BUG] rb_gc_mark(): unknown data type 0x1c(0xbfff3d6c) non object — akira yamada / やまだあきら <akira@...>
[#13824] config.{guess,sub} too old? — akira yamada / やまだあきら <akira@...>
[#13828] supported platforms / K&R — "Akinori MUSHA" <knu@...>
digest モジュールの各プラットフォームでの動作確認をお願いした
新井です。
清水@biglobeです。
新井です。
清水@biglobe です。
なかだです。
新井です。
新井です。
なかだです。
新井です。
なかだです。
新井です。
なかだです。
新井です。
新井です。
[#13833] Net::HTTP#proxy? — WATANABE Hirofumi <eban@...>
わたなべです。
[#13866] yield and proc — Takashi Ikeda <nov28@...>
池田と申します。
[#13870] massign to Hash — nobu.nakada@...
なかだです。
[#13878] Prototype for rb_gc_mark / volatile in ruby.h — Tietew <tietew@...>
Tietew です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
むらけんです.
[#13908] Forward: Seg fault in latest regex.c (PR#154) — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#13924] doc/ — Minero Aoki <aamine@...>
あおきです。
[#13929] error: multiple require of digest/* — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
なかだです。
まつもと ゆきひろです
[#13940] IO#read — "Akinori MUSHA" <knu@...>
IO#read を使って何度もストリームから読み込むような処理をする
なかだです。
まつもと ゆきひろです
At Sat, 21 Jul 2001 03:21:11 +0900,
まつもと ゆきひろです
At Sat, 21 Jul 2001 04:43:06 +0900,
At Sat, 21 Jul 2001 05:03:10 +0900,
[#13943] [REQ] ruby_stop without exit — Tietew <tietew@...>
Tietew です。
[#13959] Re: [ruby-list:30682] Re: overwride method — "Akinori MUSHA" <knu@...>
At Fri, 20 Jul 2001 21:09:36 +0900,
ごとけんです
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
[ruby-dev:13969]>
まつもと ゆきひろです
ごとけんです
なひです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
あづみです。
まつもと ゆきひろです
In <996211878.306635.31396.nullmailer@ev.netlab.jp>
まつもと ゆきひろです
In <996255758.830993.629.nullmailer@ev.netlab.jp>
まつもと ゆきひろです
In <996282482.936326.1948.nullmailer@ev.netlab.jp>
なひです。
まつもと ゆきひろです
なひです。
あづみです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
前田です。
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
[#14003] to_int in mathn [Re: overwride method ] — keiju@... (石塚圭樹)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
原です。
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
[#14026] Exception in coerce — Shin-ichiro HARA <sinara@...>
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
まつもと ゆきひろです
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
[#14045] load "~/foo" — WATANABE Hirofumi <eban@...>
わたなべです。
[#14097] DOSISH file.c — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)@帰省中です。
[ruby-dev:13982] Re: GenerativeHash
なかだです。
At Mon, 9 Jul 2001 21:17:24 +0900,
Nobuyoshi-Nakada wrote:
> たぶんそうでしょうね。キーがある場合は検索が2回から1回に減る
> わけですが、ない場合は処理としてはかわりませんから。キーがなけ
> ればコールバックを呼んで挿入するという関数(ようするにfetch!)を、
> st.cに追加するのが一番速くなるとは思いますが。
なんとなく。
Index: hash.c
===================================================================
RCS file: /cvs/ruby/src/ruby/hash.c,v
retrieving revision 1.49
diff -u -2 -p -r1.49 hash.c
--- hash.c 2001/06/22 09:12:19 1.49
+++ hash.c 2001/07/21 22:37:08
@@ -304,4 +304,11 @@ rb_hash_aref(hash, key)
}
+NORETURN(static void key_not_found());
+static void
+key_not_found()
+{
+ rb_raise(rb_eIndexError, "key not found");
+}
+
static VALUE
rb_hash_fetch(argc, argv, hash)
@@ -323,5 +330,5 @@ rb_hash_fetch(argc, argv, hash)
}
if (argc == 1) {
- rb_raise(rb_eIndexError, "key not found");
+ key_not_found();
}
return if_none;
@@ -331,4 +338,43 @@ rb_hash_fetch(argc, argv, hash)
static VALUE
+fetch_bang_block(key, hash)
+ VALUE key, hash;
+{
+ VALUE val = rb_yield(key);
+ rb_hash_modify(hash);
+ return val;
+}
+
+static VALUE
+fetch_bang_default(key, arg)
+ VALUE key, *arg;
+{
+ rb_hash_modify(arg[0]);
+ return arg[1];
+}
+
+static VALUE
+rb_hash_fetch_bang(argc, argv, hash)
+ int argc;
+ VALUE *argv;
+ VALUE hash;
+{
+ VALUE key, val;
+
+ if (rb_block_given_p()) {
+ rb_scan_args(argc, argv, "1", &key);
+ st_update(RHASH(hash)->tbl, key, &val, fetch_bang_block, hash);
+ }
+ else if (rb_scan_args(argc, argv, "11", &key, &val) == 1) {
+ st_update(RHASH(hash)->tbl, key, &val, key_not_found, 0);
+ }
+ else {
+ argv[0] = hash;
+ st_update(RHASH(hash)->tbl, key, &val, fetch_bang_default, (VALUE)argv);
+ }
+ return val;
+}
+
+static VALUE
rb_hash_default(hash)
VALUE hash;
@@ -916,36 +962,4 @@ rb_f_getenv(obj, name)
}
-static VALUE
-env_fetch(argc, argv)
- int argc;
- VALUE *argv;
-{
- VALUE key, if_none;
- char *nam, *env;
-
- rb_scan_args(argc, argv, "11", &key, &if_none);
- StringValue(key);
- nam = RSTRING(key)->ptr;
- if (strlen(nam) != RSTRING(key)->len) {
- rb_raise(rb_eArgError, "bad environment variable name");
- }
- env = getenv(nam);
- if (!env) {
- if (rb_block_given_p()) {
- if (argc > 1) {
- rb_raise(rb_eArgError, "wrong # of arguments", argc);
- }
- return rb_yield(key);
- }
- if (argc == 1) {
- rb_raise(rb_eIndexError, "key not found");
- }
- return if_none;
- }
- if (strcmp(nam, "PATH") == 0 && !rb_env_path_tainted())
- return rb_str_new2(env);
- return rb_tainted_str_new2(env);
-}
-
static void
path_tainted_p(path)
@@ -1150,4 +1164,54 @@ rb_f_setenv(obj, nm, val)
static VALUE
+env_fetch_1(argc, argv, update)
+ int argc;
+ VALUE *argv;
+ int update;
+{
+ VALUE key, if_none;
+ char *nam, *env;
+
+ rb_scan_args(argc, argv, "11", &key, &if_none);
+ StringValue(key);
+ nam = RSTRING(key)->ptr;
+ if (strlen(nam) != RSTRING(key)->len) {
+ rb_raise(rb_eArgError, "bad environment variable name");
+ }
+ env = getenv(nam);
+ if (!env) {
+ if (rb_block_given_p()) {
+ if (argc > 1) {
+ rb_raise(rb_eArgError, "wrong # of arguments (%d for %d)", argc, 1);
+ }
+ if_none = rb_yield(key);
+ }
+ else if (argc == 1) {
+ key_not_found();
+ }
+ if (update) rb_f_setenv(envtbl, nam, if_none);
+ return if_none;
+ }
+ if (strcmp(nam, "PATH") == 0 && !rb_env_path_tainted())
+ return rb_str_new2(env);
+ return rb_tainted_str_new2(env);
+}
+
+static VALUE
+env_fetch(argc, argv)
+ int argc;
+ VALUE *argv;
+{
+ return env_fetch_1(argc, argv, 0);
+}
+
+static VALUE
+env_fetch_bang(argc, argv)
+ int argc;
+ VALUE *argv;
+{
+ return env_fetch_1(argc, argv, 1);
+}
+
+static VALUE
env_keys()
{
@@ -1469,4 +1533,5 @@ Init_Hash()
rb_define_method(rb_cHash,"[]", rb_hash_aref, 1);
rb_define_method(rb_cHash,"fetch", rb_hash_fetch, -1);
+ rb_define_method(rb_cHash,"fetch!", rb_hash_fetch_bang, -1);
rb_define_method(rb_cHash,"[]=", rb_hash_aset, 2);
rb_define_method(rb_cHash,"store", rb_hash_aset, 2);
@@ -1513,4 +1578,5 @@ Init_Hash()
rb_define_singleton_method(envtbl,"[]", rb_f_getenv, 1);
rb_define_singleton_method(envtbl,"fetch", env_fetch, -1);
+ rb_define_singleton_method(envtbl,"fetch!", env_fetch_bang, -1);
rb_define_singleton_method(envtbl,"[]=", rb_f_setenv, 2);
rb_define_singleton_method(envtbl,"store", rb_f_setenv, 2);
Index: st.c
===================================================================
RCS file: /cvs/ruby/src/ruby/st.c,v
retrieving revision 1.17
diff -u -2 -p -r1.17 st.c
--- st.c 2001/06/22 09:12:20 1.17
+++ st.c 2001/07/21 22:32:49
@@ -318,4 +318,30 @@ st_add_direct(table, key, value)
}
+int
+st_update(table, key, value, callbk, arg)
+ st_table *table;
+ register char *key;
+ char **value;
+ char *(*callbk)();
+ char *arg;
+{
+ unsigned int hash_val, bin_pos;
+ register st_table_entry *ptr;
+
+ hash_val = do_hash(key, table);
+ FIND_ENTRY(table, ptr, hash_val, bin_pos);
+
+ if (ptr == 0) {
+ arg = (*callbk)(key, arg);
+ ADD_DIRECT(table, key, arg, hash_val, bin_pos);
+ if (value != 0) *value = arg;
+ return 0;
+ }
+ else {
+ if (value != 0) *value = ptr->record;
+ return 1;
+ }
+}
+
static void
rehash(table)
Index: st.h
===================================================================
RCS file: /cvs/ruby/src/ruby/st.h,v
retrieving revision 1.3
diff -u -2 -p -r1.3 st.h
--- st.h 2000/01/05 04:37:12 1.3
+++ st.h 2001/07/09 13:25:26
@@ -32,5 +32,5 @@ st_table *st_init_strtable();
st_table *st_init_strtable_with_size();
int st_delete(), st_delete_safe();
-int st_insert(), st_lookup();
+int st_insert(), st_lookup(), st_update();
void st_foreach(), st_add_direct(), st_free_table(), st_cleanup_safe();
st_table *st_copy();
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦