From: Tanaka Akira <akr@...>
Date: 2010-10-15T18:43:35+09:00
Subject: [ruby-dev:42397] Re: [Ruby 1.9-Feature#3947] 	Array#packのにエンディアン指定修飾子</>を追加

2010年10月15日16:35 NARUSE, Yui <naruse@airemix.jp>:

>> なお、私としては、l! などを個々に記述して、対応する C の型を
>> それぞれに書いたのは、そちらのほうがわかりやすいだろうという思いがありました。
>
> <, > を追加すると組み合わせが増えるので別に書いた方がわかりやすいと思ったので変えました。
>
>> あと、i, I の記述が消えていますね。
>
> が、i, I を追加しようとすると別だといまいち綺麗にならない事を理解したので、
> それぞれ書くように戻しました。

えぇ、組み合わせ的に増えていくのを全部書くのが良くないというのもわかるのです。

読むのも大変ですし、全体の機能を把握するのも困難です。
また、書き間違えることもあります。
(実際、s!>, l!>, q!> のところはおかしいですね。)

でも、具体的に指定する方法が書いてあると、
pack の玄人以外にとってわかりやすく便利なのだという確信もあります。
常に任意の組み合わせができるわけではありませんし。

というわけでこんなでどうですかね。

% svn diff --diff-cmd diff -x '-u -p' pack.c
Index: pack.c
===================================================================
--- pack.c	(revision 29504)
+++ pack.c	(working copy)
@@ -338,37 +338,19 @@ static unsigned long utf8_to_uv(const ch
  *      i, i_, i! | Integer | signed int, native endian
  *      l_, l!    | Integer | signed long, native endian
  *                |         |
- *      S>        | Integer | 16-bit unsigned, big endian
- *      L>        | Integer | 32-bit unsigned, big endian
- *      Q>        | Integer | 64-bit unsigned, big endian
- *      s>        | Integer | 16-bit signed, big endian
- *      l>        | Integer | 32-bit signed, big endian
- *      q>        | Integer | 64-bit signed, big endian
+ *      S> L> Q>  | Integer | same as the directives without ">" except
+ *      s> l> q>  |         | big endian
+ *      S!> I!>   |         |
+ *      L!> Q!>   |         |
+ *      s!> i!>   |         |
+ *      l!> q!>   |         |
  *                |         |
- *      S<        | Integer | 16-bit unsigned, little endian
- *      L<        | Integer | 32-bit unsigned, little endian
- *      Q<        | Integer | 64-bit unsigned, little endian
- *      s<        | Integer | 16-bit signed, little endian
- *      l<        | Integer | 32-bit signed, little endian
- *      q<        | Integer | 64-bit signed, little endian
- *                |         |
- *      S!>       | Integer | unsigned short, big endian
- *      I!>       | Integer | unsigned int, big endian
- *      L!>       | Integer | unsigned long, big endian
- *      Q!>       | Integer | unsigned long long, big endian
- *      s!>       | Integer | signed, big endian
- *      i!>       | Integer | signed int, big endian
- *      l!>       | Integer | signed, big endian
- *      q!>       | Integer | signed, big endian
- *                |         |
- *      S!<       | Integer | unsigned short, little endian
- *      I!<       | Integer | unsigned int, little endian
- *      L!<       | Integer | unsigned long, little endian
- *      Q!<       | Integer | unsigned long long, little endian
- *      s!<       | Integer | signed short, little endian
- *      i!<       | Integer | signed int, little endian
- *      l!<       | Integer | signed long, little endian
- *      q!<       | Integer | signed long long, little endian
+ *      S< L< Q<  | Integer | same as the directives without "<" except
+ *      s< l< q<  |         | little endian
+ *      S!< I!<   |         |
+ *      L!< Q!<   |         |
+ *      s!< i!<   |         |
+ *      l!< q!<   |         |
  *                |         |
  *      n         | Integer | 16-bit unsigned, network (big-endian) byte order
  *      N         | Integer | 32-bit unsigned, network (big-endian) byte order
-- 
[田中 哲][たなか あきら][Tanaka Akira]