@@ -94,110 +94,6 @@ FIXNUMとNILに関してはより高速な判別マクロが用意されてい
94
94
FIXNUM_P(obj)
95
95
NIL_P(obj)
96
96
97
- <<<<<<< HEAD
98
- 1.3 VALUEをCのデータに変換する
99
-
100
- データタイプがT_NIL,T_FALSE,T_TRUEである時,データはそれぞ
101
- れnil,false,trueです.このデータタイプのオブジェクトはひと
102
- つずつしか存在しません.
103
-
104
- データタイプがT_FIXNUMの時,これは31bitまたは63bitのサイズを
105
- 持つ整数です.longのサイズが32bitのプラットフォームであれば
106
- 31bitに,longのサイズが64bitのプラットフォームであれば63bit
107
- になります. FIXNUM を C の整数に変換するためにはマクロ
108
- 「FIX2INT()」または「FIX2LONG()」を使います.これらのマクロ
109
- を使用する際には事前にデータタイプがFIXNUMであることを確認す
110
- る必要がありますが,比較的高速に変換を行うことができます.ま
111
- た,「FIX2LONG()」は例外を発生しませんが,「FIX2INT()」は変
112
- 換結果がintのサイズに収まらない場合には例外を発生します.
113
- それから,FIXNUMに限らずRubyのデータを整数に変換する
114
- 「NUM2INT()」および「NUM2LONG()」というマクロがあります.こ
115
- れらのマクロはマクロはデータタイプのチェック無しで使えます
116
- (整数に変換できない場合には例外が発生する).同様にチェック無
117
- で使える変換マクロはdoubleを取り出す「NUM2DBL()」があります.
118
-
119
- char* を取り出す場合, StringValue() と StringValuePtr()
120
- を使います.
121
- StringValue(var) は var が String
122
- であれば何もせず,そうでなければ var を var.to_str() の結果
123
- に置き換えるマクロ,StringValuePtr(var) は同様に var を
124
- String に置き換えてから var のバイト列表現に対する char* を
125
- 返すマクロです.var の内容を直接置き換える処理が入るので,
126
- var は lvalue である必要があります.
127
- また,StringValuePtr() に類似した StringValueCStr() というマ
128
- クロもあります.StringValueCStr(var) は var を String に置き
129
- 換えてから var の文字列表現に対する char* を返します.返され
130
- る文字列の末尾には nul 文字が付加されます.なお,途中に nul
131
- 文字が含まれる場合は ArgumentError が発生します.
132
- 一方,StringValuePtr() では,末尾に nul 文字がある保証はなく,
133
- 途中に nul 文字が含まれている可能性もあります.
134
-
135
- それ以外のデータタイプは対応するCの構造体があります.対応す
136
- る構造体のあるVALUEはそのままキャスト(型変換)すれば構造体の
137
- ポインタに変換できます.
138
-
139
- 構造体は「struct RXxxxx」という名前でruby.hで定義されていま
140
- す.例えば文字列は「struct RString」です.実際に使う可能性が
141
- あるのは文字列と配列くらいだと思います.
142
-
143
- ruby.hでは構造体へキャストするマクロも「RXXXXX()」(全部大文
144
- 字にしたもの)という名前で提供されています(例: RSTRING()).
145
-
146
- 構造体からデータを取り出すマクロが提供されています.文字列
147
- strの長さを得るためには「RSTRING_LEN(str)」とし,文字列strを
148
- char*として得るためには「RSTRING_PTR(str)」とします.配列の
149
- 場合には,それぞれ「RARRAY_LEN(ary)」,「RARRAY_PTR(ary)」と
150
- なります.
151
-
152
- Rubyの構造体を直接アクセスする時に気をつけなければならないこ
153
- とは,配列や文字列の構造体の中身は参照するだけで,直接変更し
154
- ないことです.直接変更した場合,オブジェクトの内容の整合性が
155
- とれなくなって,思わぬバグの原因になります.
156
-
157
- 1.4 CのデータをVALUEに変換する
158
-
159
- VALUEの実際の構造は
160
-
161
- * FIXNUMの場合
162
-
163
- 1bit左シフトして,LSBを立てる.
164
-
165
- * その他のポインタの場合
166
-
167
- そのままVALUEにキャストする.
168
-
169
- となっています.よって,LSBをチェックすればVALUEがFIXNUMかど
170
- うかわかるわけです(ポインタのLSBが立っていないことを仮定して
171
- いる).
172
-
173
- ですから,FIXNUM以外のRubyのオブジェクトの構造体は単にVALUE
174
- にキャストするだけでVALUEに変換出来ます.ただし,任意の構造
175
- 体がVALUEにキャスト出来るわけではありません.キャストするの
176
- はRubyの知っている構造体(ruby.hで定義されているstruct RXxxx
177
- のもの)だけです.
178
-
179
- FIXNUMに関しては変換マクロを経由する必要があります.Cの整数
180
- からVALUEに変換するマクロは以下のものがあります.必要に応じ
181
- て使い分けてください.
182
-
183
- INT2FIX() もとの整数が31bitまたは63bit以内に収まる自信
184
- がある時
185
- INT2NUM() 任意の整数からVALUEへ
186
-
187
- INT2NUM()は整数がFIXNUMの範囲に収まらない場合,Bignumに変換
188
- してくれます(が,少し遅い).
189
-
190
- 1.5 Rubyのデータを操作する
191
-
192
- 先程も述べた通り,Rubyの構造体をアクセスする時に内容の更新を
193
- 行うことは勧められません.で,Rubyのデータを操作する時には
194
- Rubyが用意している関数を用いてください.
195
-
196
- ここではもっとも使われるであろう文字列と配列の生成/操作を行
197
- い関数をあげます(全部ではないです).
198
-
199
- 文字列に対する関数
200
- =======
201
97
1.3 VALUEをCのデータに変換する
202
98
203
99
データタイプがT_NIL,T_FALSE,T_TRUEである時,データはそれぞ
@@ -300,7 +196,6 @@ Rubyが用意している関数を用いてください.
300
196
い関数をあげます(全部ではないです).
301
197
302
198
文字列に対する関数
303
- >>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128]
304
199
305
200
rb_str_new(const char *ptr, long len)
306
201
@@ -347,15 +242,9 @@ Rubyが用意している関数を用いてください.
347
242
rb_str_cat2(str, rb_vsprintf(format, ap)) と同等である.
348
243
349
244
rb_enc_str_new(const char *ptr, long len, rb_encoding *enc)
350
- <<<<<<< HEAD
351
-
352
- 指定されたエンコーディングでRubyの文字列を生成する.
353
-
354
- =======
355
245
356
246
指定されたエンコーディングでRubyの文字列を生成する.
357
247
358
- >>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128]
359
248
rb_usascii_str_new(const char *ptr, long len)
360
249
rb_usascii_str_new_cstr(const char *ptr)
361
250
@@ -1130,13 +1019,8 @@ Rubyコマンドの実装
1130
1019
enc/*.c : エンコーディングクラス群
1131
1020
enc/trans/* : コードポイント対応表
1132
1021
1133
- <<<<<<< HEAD
1134
- gorubyコマンドの実装
1135
-
1136
- =======
1137
1022
gorubyコマンドの実装
1138
1023
1139
- >>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128]
1140
1024
goruby.c
1141
1025
golf_prelude.rb : goruby固有のライブラリ
1142
1026
-> golf_prelude.c : 自動生成
@@ -1296,21 +1180,12 @@ void rb_define_global_const(const char *name, VALUE val)
1296
1180
1297
1181
rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
1298
1182
1299
- <<<<<<< HEAD
1300
- メソッドを定義する.argcはselfを除く引数の数.argcが-1の時,
1301
- 関数には引数の数(selfを含まない)を第1引数, 引数の配列を第2
1302
- 引数とする形式で与えられる(第3引数はself).argcが-2の時,
1303
- 第1引数がself, 第2引数がargs(argsは引数を含むRubyの配列)と
1304
- いう形式で与えられる.
1305
-
1306
- =======
1307
1183
メソッドを定義する.argcはselfを除く引数の数.argcが-1の時,
1308
1184
関数には引数の数(selfを含まない)を第1引数, 引数の配列を第2
1309
1185
引数とする形式で与えられる(第3引数はself).argcが-2の時,
1310
1186
第1引数がself, 第2引数がargs(argsは引数を含むRubyの配列)と
1311
1187
いう形式で与えられる.
1312
1188
1313
- >>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128]
1314
1189
rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
1315
1190
1316
1191
privateメソッドを定義する.引数はrb_define_method()と同じ.
@@ -1423,23 +1298,13 @@ VALUE rb_block_call(VALUE obj, ID mid, int argc, VALUE * argv,
1423
1298
1424
1299
[OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
1425
1300
1426
- <<<<<<< HEAD
1427
- func2をブロックとして設定し, func1をイテレータとして呼ぶ.
1428
- func1には arg1が引数として渡され, func2には第1引数にイテレー
1429
- タから与えられた値, 第2引数にarg2が渡される.
1430
-
1431
- 1.9でrb_iterateを使う場合は, func1の中でRubyレベルのメソッド
1432
- を呼び出さなければならない.
1433
- 1.9でobsoleteとなった. 代わりにrb_block_callが用意された.
1434
- =======
1435
1301
func2をブロックとして設定し, func1をイテレータとして呼ぶ.
1436
1302
func1には arg1が引数として渡され, func2には第1引数にイテレー
1437
1303
タから与えられた値, 第2引数にarg2が渡される.
1438
1304
1439
1305
1.9でrb_iterateを使う場合は, func1の中でRubyレベルのメソッド
1440
1306
を呼び出さなければならない.
1441
1307
1.9でobsoleteとなった. 代わりにrb_block_callが用意された.
1442
- >>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128]
1443
1308
1444
1309
VALUE rb_yield(VALUE val)
1445
1310
@@ -1694,15 +1559,9 @@ dir_config(target[, default_include, default_lib])
1694
1559
1695
1560
pkg_config(pkg)
1696
1561
1697
- <<<<<<< HEAD
1698
- pkg-configコマンドからパッケージpkgの情報を得る.
1699
- pkg-configの実際のコマンド名は,--with-pkg-configコマンド
1700
- ラインオプションで指定可能.
1701
- =======
1702
1562
pkg-configコマンドからパッケージpkgの情報を得る.
1703
1563
pkg-configの実際のコマンド名は,--with-pkg-configコマンド
1704
1564
ラインオプションで指定可能.
1705
- >>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128]
1706
1565
1707
1566
/*
1708
1567
* Local variables:
0 commit comments