[#42311] [ruby-trunk - Feature #5958][Open] ThreadGroup#join — Masaki Matsushita <glass.saga@...>
[#42329] [RFC/PATCH] reinit signal_thread_list_lock atfork — Eric Wong <normalperson@...>
This issue was found under Ruby 1.9.3 (-p0 presumably), but probably
> signal_thread_list_lock may be held in the timer thread during
KOSAKI Motohiro <[email protected]> wrote:
2012/2/2 Eric Wong <[email protected]>:
[#42344] [ruby-trunk - Feature #5964][Open] Make Symbols an Alternate Syntax for Strings — Tom Wardrop <tom@...>
[#42361] 1.9.3's 1st patch release — "NARUSE, Yui" <naruse@...>
Hi,
[#42391] I'll reject stalled feature tickets — Yusuke Endoh <mame@...>
(Japaneser later; 日本語は後で)
[#42404] [ruby-trunk - Bug #5978][Open] YAML.load_stream should process documents as they are read — Thomas Sawyer <transfire@...>
[#42443] [ruby-trunk - Bug #5985][Open] miniruby skews "make benchmark" results — Eric Wong <normalperson@...>
"ko1 (Koichi Sasada)" <[email protected]> wrote:
Issue #5985 has been updated by Eric Wong.
[#42444] [ruby-trunk - Bug #5986][Open] Segmentation Fault — Luis Matta <levmatta@...>
[#42448] [ruby-trunk - Bug #5988][Open] Time class interprets "2012-02-30" as "2012-03-01" — Dylan Markow <dmarkow@...>
[#42471] [ruby-trunk - Feature #5995][Open] calling io_advise_internal() in read_all() — Masaki Matsushita <glass.saga@...>
[#42480] [ruby-trunk - Feature #5999][Open] Optimize for faster loading time and win32/file.c refactoring — Hiroshi Shirosaki <h.shirosaki@...>
[#42500] Question on getting the receiver class information from a RUBY_EVENT_CALL event hook (1.9.2) — Daniel Cadenas <dcadenas@...>
Hi all, I hope someone can help me with this problem I'm having on a
[#42523] [ruby-trunk - Bug #6008][Open] {a: 1}.hash not consistent over VM restarts — Jens Berlips <jens@...>
[#42550] [ruby-trunk - Feature #1400] Please add a method to enumerate fields in OpenStruct — Yusuke Endoh <mame@...>
On Mon, Feb 13, 2012 at 4:08 PM, Yusuke Endoh <[email protected]> wrote:
[#42564] some questions about nesting/constants — Xavier Noria <fxn@...>
Hello,
[#42579] [ruby-trunk - Bug #6012][Open] Proc#source_location also return the column — Roger Pack <rogerpack2005@...>
[#42607] [ruby-trunk - Bug #6020][Open] Unexpected is_a/kind_of behaviour — Alex N <masterlambaster@...>
[#42613] [ruby-trunk - Bug #6021][Open] TestDBM#test_aref test fails — Vit Ondruch <v.ondruch@...>
[#42630] [ruby-trunk - Feature #6023][Open] Add "a ?= 2" support for meaning "a = a.nil? ? 2 : a" — Rodrigo Rosenfeld Rosas <rr.rosas@...>
[#42672] strange 1.9.3 GC issue with Nokogiri — Eric Wong <normalperson@...>
Hello ruby-core,
On Wed, Feb 15, 2012 at 4:39 PM, Eric Wong <[email protected]> wrote:
[#42682] Ruby 1.9.3 patchlevel 125 released — "NARUSE, Yui" <naruse@...>
-----BEGIN PGP SIGNED MESSAGE-----
> Ruby 1.9.3-p125 is released.
On Thu, Feb 16, 2012 at 11:19 AM, Jon <[email protected]> wrote:
[#42685] [ruby-trunk - Bug #6036][Open] Test failures in Fedora Rawhide/17 — Bohuslav Kabrda <bkabrda@...>
[#42697] [ruby-trunk - Bug #6040][Open] Transcoding test failure: Big5 to UTF8 not defined (MinGW) — Luis Lavena <luislavena@...>
On Fri, Feb 17, 2012 at 7:47 PM, Yui NARUSE <[email protected]> wrote:
[#42715] Classes as pure mixin conatiners — trans <transfire@...>
Some time ago, I suggested that it might be worth considering a design
[#42755] [ruby-trunk - Bug #6048][Open] {Unbound}Method#hash doesn't always return the right value — Marc-Andre Lafortune <ruby-core@...>
[#42777] 500 reputation stackoverflow question about Ruby GIL — Grigory Petrov <grigory.v.p@...>
Hello.
2012/2/21 Grigory Petrov <[email protected]>:
No, it fails same way on all my OSX versions from 10.5 to 10.7
[#42789] [ruby-trunk - Bug #6057][Open] URI - Nonsensical Behavior — Scott Gonyea <scott@...>
[#42813] [ruby-trunk - Feature #6065][Open] Allow Bignum marshalling/unmarshalling from C API — Martin Bosslet <Martin.Bosslet@...>
Hello,
[#42843] [ruby-trunk - Feature #6070][Open] The scope of for loop variables — Shugo Maeda <redmine@...>
[#42857] [ruby-trunk - Feature #6074][Open] Allow alias arguments to have a comma — Thomas Sawyer <transfire@...>
[#42870] [ruby-trunk - Feature #6079][Open] Hash#each_sorted — Walter Urbaniak <mondgrav-ruby@...>
[#42891] [ruby-trunk - Feature #6083][Open] Hide a Bignum definition — Koichi Sasada <redmine@...>
> Target version changed from 2.0.0 to next minor
[#42906] [ruby-trunk - Bug #6085][Open] Treatment of Wrong Number of Arguments — Marc-Andre Lafortune <ruby-core@...>
[#42972] 50$ for answering my stackoverflow question about Ruby GIL 500 reputation stackoverflow question about Ruby GIL 50$ for answering my stackoverflow question. — Grigory Petrov <grigory.v.p@...>
Hello.
[#42981] 50$ for answering my stackoverflow question about Ruby and GIL — Grigory Petrov <grigory.v.p@...>
Thanks.
On Feb 27, 2012, at 9:54 AM, Grigory Petrov wrote:
I'm not so sure about that.
On Feb 27, 2012, at 12:10 PM, Grigory Petrov wrote:
> This test code doesn't show switch time, it shows how fast two ruby threa=
[#42989] Re: [ruby-cvs:42007] nobu:r34829 (trunk): * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): since methods — Eric Hodel <[email protected]>
On Feb 27, 2012, at 12:03 AM, [email protected] wrote:
[#43012] [ruby-trunk - Bug #6103][Open] Build failure on trunk 34850 with VC 2010 — Heesob Park <phasis@...>
[#43021] English instructions for setting up chkbuild? — Luis Lavena <luislavena@...>
Hello,
[#43030] return values of methods on String subclasses — Aaron Patterson <tenderlove@...>
It pains me to ask about this, but since Rails subclasses String, I need
[ruby-core:42814] [ruby-trunk - Feature #6065][Assigned] Allow Bignum marshalling/unmarshalling from C API
Issue #6065 has been updated by Yui NARUSE.
Status changed from Open to Assigned
Assignee changed from Martin Bosslet to Kenta Murata
I made such dump API before.
This dump a bignum as a format for OpenSSL::BN.
diff --git a/bignum.c b/bignum.c
index 3145f24..9141dc8 100644
--- a/bignum.c
+++ b/bignum.c
@@ -405,6 +405,90 @@ rb_big_unpack(unsigned long *buf, long num_longs)
}
}
+/*
+ * dump an absolute value of an integer as a big endian byte string.
+ */
+VALUE
+rb_big_bindump(VALUE val)
+{
+ long clen;
+ char *str;
+ val = rb_to_int(val);
+ if (FIXNUM_P(val)) {
+ long v = FIX2LONG(val);
+ int i;
+ for (clen = SIZEOF_LONG; clen >= 0 && !((v >> ((clen-1)*CHAR_BIT)) & 0xFF); clen--);
+ str = ALLOC_N(char, clen+1);
+ for (i = clen; i; i--) {
+ str[clen - i] = (v >> ((i-1) * CHAR_BIT)) & 0xFF;
+ }
+ }
+ else {
+ long len = RBIGNUM_LEN(val);
+ BDIGIT *ds = BDIGITS(val);
+ BDIGIT v = ds[len-1];
+ int i, j;
+
+ for (i = SIZEOF_BDIGITS; i >= 0 && !((v >> ((i-1)*CHAR_BIT)) & 0xFF); i--);
+ clen = i + (len-1) * SIZEOF_BDIGITS;
+ str = ALLOCA_N(char, clen+1);
+ str[clen] = 0;
+
+ for (j = 0; j < i; j++) {
+ str[j] = (char)((v >> ((i - j - 1)*CHAR_BIT)) & 0xFF);
+ }
+
+ for (i = len - 2; i >= 0; i--) {
+ v = ds[i];
+ for (j = 0; j < SIZEOF_BDIGITS; j++) {
+ str[clen - (i + 1) * SIZEOF_BDIGITS + j] =
+ (char)((v >> ((SIZEOF_BDIGITS-1-j)* CHAR_BIT)) & 0xFF);
+ }
+ }
+ }
+ return rb_str_new(str, clen);
+}
+
+/*
+ * load an absolute value of an integer from a big endian byte string.
+ */
+VALUE
+rb_big_binload(VALUE dummy, VALUE val)
+{
+ char *cstr = RSTRING_PTR(val);
+ long blen = RSTRING_LEN(val);
+ int i;
+
+ if (blen < SIZEOF_BDIGITS ||
+ (blen == SIZEOF_BDIGITS && !(cstr[0]>>(CHAR_BIT-2)))) {
+ long v = 0;
+ for (i = 0; i < blen; i++) {
+ v <<= CHAR_BIT;
+ v |= cstr[i];
+ }
+ return LONG2NUM(v);
+ }
+ else {
+ long len = (blen + SIZEOF_BDIGITS - 1) / SIZEOF_BDIGITS;
+ VALUE big = bignew(len, 1);
+ BDIGIT *ds = BDIGITS(big);
+ int n = 0;
+ BDIGIT v = 0;
+
+ for (i = 0; i < blen; i++) {
+ int j = i % SIZEOF_BDIGITS;
+ v |= cstr[blen - 1 - i] << (CHAR_BIT * j);
+ if (j == SIZEOF_BDIGITS - 1) {
+ ds[n] = v;
+ v = 0;
+ n += 1;
+ }
+ }
+ if (v) ds[n] = v;
+ return big;
+ }
+}
+
#define QUAD_SIZE 8
#if SIZEOF_LONG_LONG == QUAD_SIZE && SIZEOF_BDIGITS*2 == SIZEOF_LONG_LONG
@@ -3478,7 +3562,10 @@ Init_Bignum(void)
{
rb_cBignum = rb_define_class("Bignum", rb_cInteger);
+ rb_define_singleton_method(rb_cBignum, "binload", rb_big_binload, 1);
+
rb_define_method(rb_cBignum, "to_s", rb_big_to_s, -1);
+ rb_define_method(rb_cBignum, "bindump", rb_big_bindump, 0);
rb_define_method(rb_cBignum, "coerce", rb_big_coerce, 1);
rb_define_method(rb_cBignum, "-@", rb_big_uminus, 0);
rb_define_method(rb_cBignum, "+", rb_big_plus, 1);
----------------------------------------
Feature #6065: Allow Bignum marshalling/unmarshalling from C API
https://bugs.ruby-lang.org/issues/6065
Author: Martin Bosslet
Status: Assigned
Priority: Normal
Assignee: Kenta Murata
Category: core
Target version: 2.0.0
Currently, there's no public C API to create a Bignum.
There is rb_big_pack and rb_big_unpack that will do the
job, but they are not portable.
Could we offer public functionality that is independent
of the internal representation for the task of
marshaling/unmarshalling a Bignum to raw C data types?
I'd like to propose something like
- creating a bignum:
VALUE rb_big_from_ary(unsigned long *longs, size_t num_longs, int signed)
- retrieving a representation of a Bignum (longs are allocated):
size_t rb_big_to_ary(VALUE big, unsigned long **longs, int *signed)
For getting a representation, rb_big2str could also be used,
but the above would simplify things when developing an extension
that is in need of Bignum support.
Names and signatures are of course open for discussion,
the example should just serve as an indication of what
I'm aiming at.
To avoid ambiguity, it would have to be defined how
the longs are ordered and how the signed flag is to be
interpreted - I would suggest a very simple
representation: Let "longs" be the representation of
the absolute value of the bignum in little- or big-endian
order, where each of the longs themselves should probably
be in the same order, in order to eliminate ambivalence.
Signed is either 0 or 1, so no two's complement or anything
involved.
I would volunteer to provide a patch for this if we would
agree on something.
--
http://bugs.ruby-lang.org/