[#45938] How to make a virtual 2nd column!!! — Kurt Euler <keuler@...>
All-
[#45942] win32ole and excel — Martin Stannard <martin@...>
Hi,
[#45948] "gets" blocking process not thread (in Windows only) — Matt Pattison <mfp@...>
The problem with my program is that (in Windows) gets seems to block the entire
Hi,
On Fri, Aug 02, 2002 at 10:31:15AM +0900, nobu.nokada@softhome.net wrote:
Hi,
[#45998] vim indenteation for ruby — Daniel Bretoi <lists@...>
[#46004] Checking whether a process exists (unix) — Harry Ohlsen <harryo@...>
To check whether a process with a given ID is still running on unix, I would
[#46023] Style: where to require in libs? — <bbense+comp.lang.ruby.Aug.01.02@...>
-----BEGIN PGP SIGNED MESSAGE-----
[#46030] IO.readlines is slow ? — "Shashank Date" <ADATE@...>
I really like the convenience of doing:
[#46048] RE: GetoptLong#to_hash — "Berger, Daniel" <djberge@...>
[#46072] How to Load Script from a C Extension? — William Djaja Tjokroaminata <billtj@...>
Hi,
[#46091] JRuby changes breaking code? — adamon@... (Damon)
I am running the sample code straight out of Ruby Developer's Guide,
[#46105] Ruby on the Sharp Zaurus PDA — Ian Macdonald <ian@...>
Hi,
Hi,
On Sun 04 Aug 2002 at 06:26:20 +0900, Jerome Gotangco wrote:
[#46107] embed or swig? — ptkwt@...1.aracnet.com (Phil Tomson)
I'm working a C++ project for a contract I'm doing. Originally, the
"Massimiliano Mirra" <list@NOSPAMchromatic-harp.com> wrote in message
i was just reading over a little of the swig docs and HOLY CODING! from
I'm working on a wxWindows port for Ruby (called, predictably, wxRuby),
[#46125] Deprecation and Unicode — Danny van Bruggen <danny@...>
Hello all,
[#46128] Assoc Class (Hash Pairs) — Tom Sawyer <transami@...>
i've been thinking about posting this as an RCR.
> i've been thinking about posting this as an RCR.
----- Original Message -----
Hello --
On Sun, 2002-08-04 at 06:40, David Alan Black wrote:
Hi --
[#46132] mini-ANN: Magnetic Poetry via TkCanvas — Phlip <phlip_cpp@...>
Rubies:
[#46136] Should this work? — "Hal E. Fulton" <hal9000@...>
Should multiple assignment work for the
[#46151] String -> Integer anomoly? — "Gavin Sinclair" <gsinclair@...>
Why does "09".to_i return 9
[#46192] Detecting when an instance variable is created/set — Harry Ohlsen <harryo@...>
Imagine we have a class like ...
On Sun, 2002-08-04 at 06:03, Harry Ohlsen wrote:
> > Can I write a method (of class Object or Kernel, perhaps) that will be
On Sun, Aug 04, 2002 at 10:32:44PM +0900, Harry Ohlsen wrote:
> Would it be enough for you to catch creation of instance variables in
On Mon, Aug 05, 2002 at 04:59:40AM +0900, Harry Ohlsen wrote:
[#46264] Dynamic creation of classes and methods — Tomasz Wegrzanowski <taw@...>
I want to create classes and methods on fly.
>>>>> "T" == Tomasz Wegrzanowski <taw@users.sourceforge.net> writes:
On Mon, Aug 05, 2002 at 05:51:58PM +0900, ts wrote:
>>>>> "T" == Tomasz Wegrzanowski <taw@users.sourceforge.net> writes:
On Mon, Aug 05, 2002 at 07:37:50PM +0900, ts wrote:
[#46270] Regex question — "Gavin Sinclair" <gsinclair@...>
Folks,
Hello --
On Mon, Aug 05, 2002 at 11:37:12AM +0900, David Alan Black wrote:
> On Mon, Aug 05, 2002 at 11:37:12AM +0900, David Alan Black wrote:
[#46296] ruby-dev summary 17714-17874 — Takaaki Tateishi <ttate@...>
[#46326] RE: EW is unable to deliver — "Hammond, Tony (ELSLON)" <T.Hammond@...>
[#46337] Super-iterator? (long) — "Hal E. Fulton" <hal9000@...>
Here's an idea for you. I've worked on it a couple of days.
[#46341] More questions on automation from na誰ve Windows user. — Chris Gehlker <gehlker@...>
Hi all,
> I do have IE and it's supposedly scriptable. I just
[#46356] Coding challenge (on Ruby Garden) — David Alan Black <dblack@...>
Hello --
Hi --
On Mon, 2002-08-05 at 18:58, David Alan Black wrote:
David Alan Black <dblack@candle.superlink.net> wrote in message news:<Pine.LNX.4.30.0208052056270.15880-100000@candle.superlink.net>...
[#46357] Compiling Ruby to Native Code? — web2ed@... (Edward Wilson)
Having looked at OCaml, after following a post to this group, one
On Tue, Aug 06, 2002 at 10:19:54AM +0900, Edward Wilson wrote:
%% > Game over, if Java or Ruby provides native compilation; it won't make
"Rafael 'Dido' Sevilla" <dido@imperium.ph> wrote in message news:<20020807033226.GB1745@imperium.ph>...
On Thu, Aug 08, 2002 at 08:45:07AM +0900, Lothar Scholz wrote:
[#46393] Writing a method that's added to both Fixnum and Bignum — Harry Ohlsen <harryo@...>
A mate of mine just asked me an interesting question. He had written a method
[#46426] Is There an Inverse of 'rb_define_method'? — William Djaja Tjokroaminata <billtj@...>
Hi,
[#46427] performance about "..." and '...' — tran55555@... (Email55555)
Hi,
[#46442] COM on Unix? — Chris Gehlker <gehlker@...>
As part of my crusade to make Ruby an automation language I read up a little
[#46443] Dup and Clone — "Justin Johnson" <justinj@...>
Could anyone kindly point out the difference between 'dup' and 'clone'?
[#46452] HT delete all files in a directory... — Kurt Euler <keuler@...>
Rubites:
[#46468] sort problem — Ian Macdonald <ian@...>
Hi,
[#46475] Named paramters again — "Justin Johnson" <justinj@...>
Hi --
[#46520] Something that corresponds to Perl's -T and -B tests? — Lloyd Zusman <ljz@...>
I've searched the Ruby documentation, and I can't find descriptions of
>>>>> "L" == Lloyd Zusman <ljz@asfast.com> writes:
ts <decoux@moulon.inra.fr> writes:
[#46523] XHTML output — Francois GORET <fgoret@...1.loxinfo.co.th>
Hi,
[#46532] Class hierarchy... for data — Tom Gilbert <tom@...>
Hey,
[#46539] A very small challenge — "Hal E. Fulton" <hal9000@...>
This is a very minor piece of code,
[#46550] GUI's and the Rouge, Part IV — Kero van Gelder <kero@...>
Funny, two savannah accounts for the same objective:
[#46558] Non trivial features changes in 1.7.2 via CVS — <bbense+comp.lang.ruby.Aug.07.02@...>
-----BEGIN PGP SIGNED MESSAGE-----
<bbense+comp.lang.ruby.Aug.07.02@telemark.stanford.edu> writes:
[#46565] Re: Unicode in Ruby now? — "Marcin 'Qrczak' Kowalczyk" <qrczak@...>
Wed, 7 Aug 2002 16:41:18 +0900, Curt Sampson <cjs@cynic.net> pisze:
On Thu, 8 Aug 2002, Marcin 'Qrczak' Kowalczyk wrote:
Curt Sampson <cjs@cynic.net> wrote in message news:<Pine.NEB.4.44.0208081139480.17422-100000@angelic.cynic.net>...
On Sat, 10 Aug 2002, Bret Jolly wrote:
[#46587] Bug in TkText — Albert Wagner <alwagner@...>
Ruby-1.6.7;Tcl/Tk-8.3.4
[#46615] The whole 'Spades' thing: GA and cardbots — "Hal E. Fulton" <hal9000@...>
OK, I have more useful things to be doing.
[#46646] RE: struct needs to be a constant? — "Berger, Daniel" <djberge@...>
>>>>> "B" == Berger, Daniel <djberge@qwest.com> writes:
Hi,
>>>>> "n" == nobu nokada <nobu.nokada@softhome.net> writes:
Hi,
>>>>> "n" == nobu nokada <nobu.nokada@softhome.net> writes:
[#46663] ruby sample code runtime problem — markgriffin@... (mark G)
Hello all,
[#46669] Testing for mod_ruby (was "how do i mock the presence / absence of a constant w/out getting warnings?") — patrick-may@... (Patrick May)
Currently, the only reliable way to test for the mod_ruby enviroment
[#46672] Variable validation — "Chris Morris" <chrismo@...>
I've got a class that has a number of instance variables, some of which must
[#46681] Dr. Dobbs Ruby Article — " JamesBritt" <james@...>
The September issue of Dr Dobbs has an article by Phil Tomson on distributed
> The September issue of Dr Dobbs has an article by Phil Tomson on
[#46696] Ruby in EETimes — ptkwt@...1.aracnet.com (Phil Tomson)
When it rains it pours, it seems:
[#46698] Ruby/LibGlade: multiple GladeXML objects — Tom Sawyer <transami@...>
hi,
[#46715] Getting the file name from a File::Stat object? — Lloyd Zusman <ljz@...>
Is there a way to get the file name from a File::Stat object?
At Fri, 9 Aug 2002 22:46:32 +0900,
[#46730] nil || // — Paul Brannan <pbrannan@...>
Why does this not work in Ruby 1.6:
[#46732] ambiguity between local variable assignment and writter method — Tom Sawyer <transami@...>
does anyone else find it annoying that local variable assignment is
Hi --
On Fri, 2002-08-09 at 22:50, dblack@candle.superlink.net wrote:
Hi --
> class A
Hi, Tom. I see a pattern to all of your expectations for Ruby. Are you a
On Sat, 2002-08-10 at 17:44, Albert Wagner wrote:
On Sunday 11 August 2002 02:07 pm, Tom Sawyer wrote:
On Sat, Aug 10, 2002 at 03:00:28AM +0900, Tom Sawyer wrote:
On Fri, 2002-08-09 at 12:05, Paul Brannan wrote:
Tom Sawyer <transami@transami.net> writes:
At Sat, 10 Aug 2002 03:44:45 +0900,
GOTO Kentaro <gotoken@notwork.org> writes:
On Fri, 2002-08-09 at 13:30, Dave Thomas wrote:
How about:
On Fri, 2002-08-09 at 15:19, Rich Kilmer wrote:
Tom Sawyer <transami@transami.net> writes:
[#46776] Unit testing is considered harmful — "MikkelFJ" <mikkelfj-anti-spam@...>
I'm sorry, I could help it. I just find this considered harmful thing
[#46780] The problem with using $1 in regexps — Philip Mak <pmak@...>
sub _num_quotes {
[#46827] Economics of E-books? ( was re: Dr. Dobbs Ruby Article) — " JamesBritt" <james@...>
Re: USD $5 for a single Dr. Dobbs article
[#46841] Ah, I'm finally back from Japan ... — Dossy <dossy@...>
Not like anyone cares (or noticed) but my two week stay in Japan
----- Original Message -----
[#46845] extend Html4? — Philip Mak <pmak@...>
Suppose I have this code:
Hello --
On Sun, Aug 11, 2002 at 09:16:01AM +0900, dblack@candle.superlink.net wrote:
[#46875] To be a Module, or not to be... — Holden Glova <dsafari@...>
-----BEGIN PGP SIGNED MESSAGE-----
>>>>> "H" == Holden Glova <dsafari@paradise.net.nz> writes:
-----BEGIN PGP SIGNED MESSAGE-----
>>>>> "H" == Holden Glova <dsafari@paradise.net.nz> writes:
On Sun, 2002-08-11 at 03:40, ts wrote:
>>>>> "T" == Tom Sawyer <transami@transami.net> writes:
[#46892] empty file returns nil not empty string? — Thomas Sdergaard <thomass@...>
Hello,
[#46902] "ri test" tells me to see page 430? — Philip Mak <pmak@...>
$ ri test
[#46906] subclassing and @@variable — Philip Mak <pmak@...>
I have the following test code:
Philip Mak wrote:
[#46911] Choosing ruby? — Rhymes <raims@...>
[#46957] Handling forms on database driven websites — Philip Mak <pmak@...>
Ever since I learned Perl, Ruby and MySQL, I've built several database
[#46965] replacing values in some files: line endings etc — Tobias Reif <tobiasreif@...>
Hi,
[#47000] Primary Key Hash help — "Chris Morris" <chrismo@...>
I have a huge data file with rows like this:
> I have a huge data file with rows like this:
[#47053] ruby-dev summary 17875-17964 — TAKAHASHI Masayoshi <maki@...>
There was a lot of discussions in ruby-dev this week.
[#47080] class === class often false? — "Bill Kelly" <billk@...>
Hi,
----- Original Message -----
[#47134] Data_Make_Struct Considered Dangerous? — William Djaja Tjokroaminata <billtj@...>
Hi,
ts <decoux@moulon.inra.fr> wrote:
Hi,
>>>>> "W" == William Djaja Tjokroaminata <billtj@z.glue.umd.edu> writes:
Two things:
[#47163] YAML.rb 0.38 -- Objects in plain text — why the lucky stiff <yaml4r@...>
Pleased to announce the latest YAML.rb product.
[#47199] Is this array operation correct? —
Hi,
[#47202] Minimum version of windows for ruby? — ian <spammapsglenizrainmapsspammaps@...>
Hi -
[#47212] Ruby Weekly News — Dave@...
----- Original Message -----
Please don't take this as a knock of the efforts required to produce the
----- Original Message -----
[#47218] Cannot input Thai character in TkEntry — "nongluk" <nonglukb@...>
Hi,
[#47228] Re: 1.7.2 v. the latest and 1.7.2 windows dist — Andrew Hunt <andy@...>
>> The front page of ruby-lang.org lists 1.7.2 as the current development
[#47240] RE: A few newbie questions... — "Bennett, Patrick" <Patrick.Bennett@...>
You're really going to like Ruby. :>
----- Original Message -----
[#47244] RE: How to use the safe_unlink method? — Kurt Euler <keuler@...>
Guy-
[#47270] Legendary Chaos Computer Club goes Ruby — "MikkelFJ" <mikkelfj-anti-spam@...>
The Chaos Computer Club that spawned legendary hackers in the 80'ties
[#47292] Thought question: Where does "new" come from? — "Hal E. Fulton" <hal9000@...>
I've been brooding again on the circularities
----- Original Message -----
Hi --
Hello --
Hi --
[#47306] adding method to existing class — Eugene Scripnik <Eugene.Scripnik@...>
I need to include some methods in class stored in some variable:
[#47344] eruby editor — "Kyle Wilson" <kyle.wilson@...>
Hello. I was wondering if anyone knows of a text editor which will
Here's what I have - 91 characters with everything you'd need for a Flash
[#47348] robust hardware to run ruby newtwork service — Tom Sawyer <transami@...>
i know this is bit off topic, but since you all are my "computer family"
[#47360] Is it possible?---ruby xxx.rb arg1 arg2... — "Chai, Xinwei" <ChaiXV@...>
Hellow guys:
[#47375] How do I find the URL of the .rhtml that's being served? — sera@... (Francis Hwang)
I have a utility class that's being used inside a bunch of different
[#47440] Help with a segv in mod_ruby — Dave Thomas <Dave@...>
> I'm getting a segv in mod_ruby:
[#47441] Narf cgi library alpha release — patrick-may@... (Patrick May)
Information: http://narf-lib.sourceforge.net/
[#47461] How do I dup file descriptors in ruby? (diverting STDERR) — "Richard A. Ryan" <ryan@...>
Hello,
[#47464] IDE vs. editor — Holden Glova <dsafari@...>
-----BEGIN PGP SIGNED MESSAGE-----
-----BEGIN PGP SIGNED MESSAGE-----
>>>>> "Holden" == Holden Glova <dsafari@paradise.net.nz> writes:
On Sat, Aug 17, 2002 at 10:49:20AM +0900, Jim Weirich wrote:
On Sun, Aug 18, 2002 at 03:45:00AM +0900, Massimiliano Mirra wrote:
On Sun, Aug 18, 2002 at 03:57:22AM +0900, Alan Chen wrote:
-----BEGIN PGP SIGNED MESSAGE-----
[#47504] FreeRide install problem — Armin Roehrl <armin@...>
Hi,
[#47545] How can I avoid "Insecure operation - stat (SecurityError) " — " JamesBritt" <james@...>
I'm trying to get some ruby code, running under mod_ruby, to retrieve the
[#47547] Re: What Ruby needs. — "Shashank Date" <ADATE@...>
I do not have any problem with item 1) on your wish list as long as I don't
[#47559] Ruby Bot — Giuseppe Bilotta <bilotta78@...>
Hello,
Well, with rbot 0.9.4 there was an error about SIGHUP not being a
[#47585] equivalent of python's __debug__ — David Garamond <davegaramond@...>
python can compile in two modes, normal and optimized. in optimized
[#47598] ruby-dev summary 17965-18021 — Minero Aoki <aamine@...>
Hi all,
[#47618] drb -- distrib'd ruby and marshalling, question about methods — john@... (John van V.)
Hello, I have been moving perl objects around for years and I was very
[#47640] Perl -> Ruby: assistance wanted (offlist) — "Hal E. Fulton" <hal9000@...>
Hello all...
[#47643] thread control — "Shashank Date" <ADATE@...>
I am trying to write a ruby script (Ruby 1.7.2 mswin32) which does the
[#47669] Data_Make_Struct and ALLOC Considered Harmful? — billtj@... (Bill Tj)
Hi,
[#47680] quines (again) — "Bill Kelly" <billk@...>
Hi,
[#47688] the power of ruby — AW <sturmpanzer@...>
Hi,
[#47695] What makes a "good" Ruby extension? — Tim Hunter <cyclists@...>
So I'm reading the "Comparing Gui Toolkits" wiki page
Tim Hunter wrote:
> I think this is a question that a lot of Ruby programmers struggle
[#47749] What New Language After Ruby? — William Djaja Tjokroaminata <billtj@...>
To Andrew Hunt and David Thomas:
Although activity seems to have died down, here are some links
Hi,
Hi,
Nat Pryce <nat.pryce@b13media.com> writes:
Thanks a lot, Marcin, for the valuable information. The description on
On Fri, 2002-08-23 at 15:18, William Djaja Tjokroaminata wrote:
Hi,
Hi,
[#47757] Puzzeled by Range object — Robert McGovern <duemoko@...>
I was just writing an example for the "power of ruby" thread, using ranges.
[#47767] RE: Some comments on the 167-1 installer — Andrew Hunt <andy@...>
>Rich says:
[#47802] ANN: scanf for Ruby — "Hal E. Fulton" <hal9000@...>
This is the product of the Austin Ruby Codefest 2002,
[#47817] A Repeat: New Language After Ruby? — William Djaja Tjokroaminata <billtj@...>
Hi,
Peter Hickman <peter@semantico.com> writes:
[#47826] RE: select on solaris — "Berger, Daniel" <djberge@...>
[#47842] Newbie question. How to install a new package? — Giuseppe Bilotta <bilotta78@...>
Well, I installed URI by simply popping it into the \lib\ directory,
[#47864] nohup -g and ruby-1.6.7 on Solaris9 — Hugh Sasse Staff Elec Eng <hgs@...>
Given the following:
[#47867] RE: Newbie question. How to install a new package? — CRIBBSJ <CRIBBSJ@...>
[#47888] RE: Newbie question. How to install a new package? — CRIBBSJ <CRIBBSJ@...>
> -----Original Message-----
[#47918] Win32 Scripting — Sean Middleditch <elanthis@...>
Hi,
----- Original Message -----
On Fri, Aug 23, 2002 at 02:36:48AM +0900, Sean Middleditch wrote:
[#47932] Can I write to DATA? — Jim Freeze <jfreeze@...>
Hi:
[#47945] Paul Graham essay on language popularity — HotFusionMan@... (Albert Davidson Chou)
I don't read the list/group anymore, so I'm not sure whether this
[#47958] Tk and Gtk — Robert Warning <cleeker@...>
Okay this isn't exactly a ruby question, but in the near future I want
Sean Middleditch wrote:
[#47995] converting rows into structs — Eugene Scripnik <Eugene.Scripnik@...>
I have a methods that converts all DB rows into structs using Struct
On 2002.08.23, Eugene Scripnik <Eugene.Scripnik@itgrp.net> wrote:
Friday, August 23, 2002, 2:19:53 PM, you wrote:
On 2002.08.23, Eugene Scripnik <Eugene.Scripnik@itgrp.net> wrote:
[#48001] new ruby from cvs — Eugene Scripnik <Eugene.Scripnik@...>
I installed new ruby 1.7.2 (2002-08-21) from cvs and get warning in
[#48013] Perl Exegesis 5 — "Mike Wilson" <wmwilson01@...>
You can find the Perl Exegesis 5 here:
In article <F249FbCUalRlUwViKaZ000117d8@hotmail.com>,
At 3:19 AM +0900 8/24/02, Phil Tomson wrote:
On Sat, Aug 24, 2002 at 03:37:04AM +0900, Dan Sugalski wrote:
[#48035] Why Ruby Uses Mark-and-Sweep GC? — William Djaja Tjokroaminata <billtj@...>
Hi,
[#48062] Ruby and Judy — Joseph McDonald <joe@...>
Joseph McDonald wrote:
----- Original Message -----
[#48082] Distributed Object Container — junderdown@... (Jason Underdown)
Is anyone out there in the Ruby community working on an object
----- Original Message -----
> J2EE - more specifically, EJB - enables those nice things like pooling,
> > But how can you have Enterprise *Java(tm)* Beans without, well,
>
"Gavin Sinclair" <gsinclair@soyabean.com.au> wrote in message news:<000201c24d03$2caa8ad0$0c6332d2@nosedog>...
> Yes, you are right, J2EE is just a standard implemented by several app
> > Yes, you are right, J2EE is just a standard implemented by
[#48114] CompareByValue — Ryan King <rking@...>
I put a challenge up at:
On 2002.08.25, Ryan King <rking@panoptic.com> wrote:
On 2002.08.25, Dossy <dossy@panoptic.com> wrote:
On 2002.08.27, Ryan King <rking@panoptic.com> wrote:
On 2002.08.29, Dossy <dossy@panoptic.com> wrote:
[#48165] RDoc: .png files are empty — Joel VanderWerf <vjoel@...>
[#48168] warning modifying constant & 'global constant' — David Garamond <davegaramond@...>
1. if someone attempts to modify a constant, why does ruby choose to
[#48217] Getting list of classes in a module? — Philip Mak <pmak@...>
How do I get the list of all classes that are defined in a module
[#48219] Tk scrollbar with elided text — Albert Wagner <alwagner@...>
I am using a TkText as a base for an editor, with folding implemented by using
[#48223] Ruby Based App Server — junderdown@... (Jason Underdown)
I posted a similar question a few days ago, but didn't get any
> I've worked on web applications built on the J2EE platform as well as
[#48227] Bug report: $irbrc does not affect IRB — Brian Marick <marick@...>
In both the IRB from Ruby 1.6.4 and irb-0.9-02.07.03.tgz from RAA,
[#48233] Question about Ruby extension API — "Bennett, Patrick" <Patrick.Bennett@...>
I've looked all over but can't find the function call for doing a simple assignment (!)
[#48234] Hybrid hash and array? — Philip Mak <pmak@...>
When programming radio buttons on a website, I find myself using this
[#48264] Ruby developers: help push RPKG development and usage forward!! (it is like CPAN.pm, only Ruby) — itsnewsforme@... (M S)
A big complaint from people looking into Ruby is that they don't see
Intro: sorry for the long post, I wanted to speak, hope you won't mind
>>>>> "M" == M S <itsnewsforme@yahoo.ca> writes:
Actually, it would be nice to have them online, but not necessarily
On Tue, Aug 27, 2002 at 09:39:32PM +0900, Rich Kilmer wrote:
http://kt-www.jaist.ac.jp/~ttate/ruby/ruby-dl.html
On Tue, 2002-08-27 at 19:32, Rich Kilmer wrote:
You can just install it in another directory and then go to that
uh, sorry, how do i get 1.7.2? i tried anonymous cvs but it said NO. did
Nightly CVS snapshot:
just complied and drew up an error:
From Tom Sawyer <1030511597.793.982.camel@silver>
Hi,
thanks matz,
On Tue, Aug 27, 2002 at 06:47:30PM +0900, ts wrote:
[#48274] ANN: RJudy-0.1 - Judy Arrays for Ruby — Lyle Johnson <lyle@...>
All,
[#48320] compile time type checking — "Volkmann, Mark" <Mark.Volkmann@...>
I think the main reason that languages such as Ruby, Python, Perl and TCL
[#48333] Temporary VALUE Needs to Be Protected? — William Djaja Tjokroaminata <billtj@...>
Hi,
[#48352] c-api: rb_str_new — Matthias Veit <matthias_veit@...>
[#48420] Is anybody working on a ruby compiler (rb->exe) — "Kontra, Gergely" <kgergely@...>
Hi!
[#48434] RE: Is anybody working on a ruby compiler (rb->exe) — christopher.j.meisenzahl@...
[#48446] How to read files in all subdirectories? — Kurt Euler <keuler@...>
Ruby experts:
[#48467] Novice needs help with FX Ruby — lucidlife@... (ck)
Hi,
ck wrote:
[#48468] Compile error — "C. David Wilde" <cdw@...>
Hello,
[#48477] Newbie converting brain from perl — William Pietri <william-news-383910@...>
[#48494] next statement — "David Douthitt" <DDouthitt@...>
I thought there was a way to use "next" (or similar) to escape an arbitrary number of loops. Akin to this:
[#48521] Ruby/DL with GTK gtk_signal_connect — Tom Sawyer <transami@...>
hi all, i'm working with Ruby/DL, binding to GTK. it is very cool. but i
[#48544] Best GC for Ruby? — "Justin Johnson" <justinj@...>
Hi,
[#48556] RE: Is anybody working on a ruby compiler (rb->exe) — christopher.j.meisenzahl@...
> > >Cool... but are there any english docs on exerb? How
-----BEGIN PGP SIGNED MESSAGE-----
On Fri, Aug 30, 2002 at 08:14:20AM +0900, michael libby wrote:
[#48558] gethostbyname() requires reverse lookup to work? — Paul Brannan <pbrannan@...>
We ran into a problem last night where we could ping a host, telnet to
[#48564] YAML.rb 0.40 -- Circular references, Emitter enhancements — yamlrb@...
Aha! A new YAML.rb is out at long last: >
[#48565] how to create a ruby object via the c-api? — Matthias Veit <matthias_veit@...>
[#48573] FXRuby Threading Problem Solved? — Lyle Johnson <lyle@...>
All,
[#48584] suggestions to the Ruby community — stibbs <stibbs@...>
Hi, first i would like to state that i absolutely love Ruby more than any
I've encountered the same complaints from my co-workers and
instead of everyone writing your own documentation, wouldnt a wiki
-----BEGIN PGP SIGNED MESSAGE-----
> >I was surprised just now to find that there is no absolute requirement
-----BEGIN PGP SIGNED MESSAGE-----
Hi
[#48633] Can We Pass Block from Function to Function? — William Djaja Tjokroaminata <billtj@...>
Hi,
[#48648] How to write scripts with plug-in support [long] — gabriele renzi <surrender_it@...>
Hi all,
[#48657] ICFP Programming Contest — Alan Chen <alan@...>
http://icfpcontest.cse.ogi.edu/task.html
On Sat, 31 Aug 2002, Alan Chen wrote:
[#48678] proper upgrade to 1.7.3 — Tom Sawyer <transami@...>
so i went ahead and started moving over to 1.7.
[#48703] RE: suggestions to the Ruby community — "Pe, Botp" <botp@...>
> From: JamesBritt [mailto:james@jamesbritt.com]
> James, you've said it all (kindly and clearly, too).
[#48705] Ruby aesthetics — vegai@...
Hello. I've been checking into python lately quite a lot, and I
My two reasons for disliking Python's aesthetics:
Yukihiro Matsumoto graced us by uttering:
>
On Wed, 2002-09-04 at 02:56, Gavin Sinclair wrote:
> On Wed, 2002-09-04 at 02:56, Gavin Sinclair wrote:
----- Original Message -----
I am really amazed if Ruby is really compared against Java, especially in
----- Original Message -----
On Thu, 5 Sep 2002, Hal E. Fulton wrote:
Hi,
On Thu, 5 Sep 2002, William Djaja Tjokroaminata wrote:
Paul Prescod wrote:
Hi,
On Thursday 05 September 2002 12:08 pm, Christian Szegedy wrote:
Hi,
On Fri, 6 Sep 2002, William Djaja Tjokroaminata wrote:
I think we have communicated very well; I agree with all you said. May I
On Fri, 6 Sep 2002, William Djaja Tjokroaminata wrote:
Hi Matz,
Hi,
On Sat, 7 Sep 2002, Yukihiro Matsumoto wrote:
Hello --
----- Original Message -----
----- Original Message -----
Gavin Sinclair (gsinclair@soyabean.com.au) wrote:
Hi,
----- Original Message -----
Re: ANN: RJudy-0.1 - Judy Arrays for Ruby
On Tue, Aug 27, 2002 at 02:41:19PM +0900, Lyle Johnson wrote:
> All,
>
> I've just uploaded RJudy, an extension module that provides a Ruby
> interface to the Judy arrays library. This extension exposes four new
> classes to Ruby (Judy1, JudyL, JudySL and JudyHash). The first three are
> more-or-less direct wrappers of the current Judy API. The last is a
> first cut at a more general replacement for Ruby's Hash (i.e. with
> arbitrary-type keys), based on the approach described in the Judy
> application note "Scalable Hashing".
>
> The RDoc documentation for all this stuff is here:
>
> http://www.knology.net/~lyle/rjudy
>
> and the source tarball (which also includes those docs) is here:
>
> http://www.knology.net/~lyle/rjudy-0.1.tar.gz
>
> Very interesting stuff indeed (Judy, not my personal work). The
> "JudyHash" class is still pretty rough by anyone's measure (i.e.
> probably lots of opportunities for optimization) but it's already
> consistently beating Ruby's Hash (in my admittedly limited benchmarking
> tests). If you're interested in playing with this, I could use your help
> in coming up with more challenging and meaningful benchmarks, as well as
> examples. Also note that I haven't implemented all of Hash's methods
> yet, so it's not yet a "drop-in" replacement for Hash.
I've replicated most of your code for the last several hours to use
JudyL inside the internal hash (st_*).
This way, all of Ruby could potentially be faster (including method
lookups and of course builtin hashes).
It's as rough as your code and then some more, but it already challenges
JudyHash's speed in some situations. It is little more than JudyHash's
code inside st_*, but hey, you can't expect much more from such a quick
hack :-)!
BTW, while testing my hashes against JudyHash I found some flaws in
the way you do the admittedly simple benchmarks in words.rb:
* GC.start should be done between each test to make things a little
more fair, otherwise the first to run has the advantage as the GC
will be called more frequently in the last ones...
* your code uses calloc instead of alloc(), so the Ruby GC heuristics
don't work and no GC is called inside JudyHash
* in Ruby hashes, a String key is duplicated if it isn't used in
the hash already; JudyHash doesn't do that. This is why my Hash seemed
to suck badly against JudyHash (9us against 3us to insert, about the
same, 2.5us, to lookup) in words.rb, for the keys are new each time,
and the associated values are never updated. This means a new String
object is created in each insertion... In my hash, insertion
will be much faster when the key doesn't need to be replicated.
To test this behavior even /usr/share/dict/word could work...
head -10000 /usr/share/dict/word > /tmp/data
cat /tmp/data /tmp/data /tmp/data /tmp/data > /tmp/data2
cat /tmp/data2 /tmp/data2 /tmp/data2 /tmp/data2 > /tmp/data3
for n in /tmp/data*; do ./ruby -I/usr/local/lib/site_ruby/1.6/i386_linux \
words.rb $n; done
I'm attaching a diff, please be indulgent: it's about 4:30AM in my locale
and I'm really in need of some sleep. Got no time to find a place to
upload all this, plus it's small...
Please take a look at the small attached patch...
I've had it build in 1.7.2 and I have had it running for some time,
seemingly OK, but I'm too tired now to do unit testing :-)
Some results here:
batsman@kodos:~/src/cvs/ruby-judy$ wc /tmp/data*
10000 10000 122880 /tmp/data
40000 40000 491520 /tmp/data2
160000 160000 1966080 /tmp/data3
640000 640000 7864320 /tmp/data4
850000 850000 10444800 total
doneman@kodos:~/src/cvs/ruby-judy$ for n in /tmp/data*; do ./ruby -1@1PI1@ /usr/local/lib/site_ruby/1.6/i386-linux/jwords2.rb $n;
Time to insert 10000 words into a JudySL array: 28592 usec.
=> Average insertion time: 2.8592 usec/insertion.
Time to look up 10000 words in a JudySL array: 17007.0 usec.
=> Average lookup time: 1.7007 usec/word.
==================
Time to insert 10000 words into a JudyHash: 53110.99999999999 usec.
=> Average insertion time: 5.3111 usec/insertion.
Time to look up 10000 words in a JudyHash: 16263.0 usec.
=> Average lookup time: 1.6263 usec/word.
==================
Time to insert 10000 words into a Ruby Hash: 30890 usec.
=> Average insertion time: 3.089 usec/insertion.
Time to look up 10000 words in a Ruby Hash: 16794.0 usec.
=> Average lookup time: 1.6794 usec/word.
Time to insert 40000 words into a JudySL array: 91143.0 usec.
=> Average insertion time: 2.278575 usec/insertion.
Time to look up 40000 words in a JudySL array: 63044.0 usec.
=> Average lookup time: 1.5761 usec/word.
==================
Time to insert 40000 words into a JudyHash: 93122.00000000004 usec.
=> Average insertion time: 2.328050000000001 usec/insertion.
Time to look up 40000 words in a JudyHash: 80944.0 usec.
=> Average lookup time: 2.0236 usec/word.
==================
Time to insert 40000 words into a Ruby Hash: 101690.0 usec.
=> Average insertion time: 2.54225 usec/insertion.
Time to look up 40000 words in a Ruby Hash: 70016.0 usec.
=> Average lookup time: 1.7504 usec/word.
Time to insert 160000 words into a JudySL array: 352922.0000000001 usec.
=> Average insertion time: 2.205762500000001 usec/insertion.
Time to look up 160000 words in a JudySL array: 256844 usec.
=> Average lookup time: 1.605275 usec/word.
==================
Time to insert 160000 words into a JudyHash: 399579.0 usec.
=> Average insertion time: 2.49736875 usec/insertion.
Time to look up 160000 words in a JudyHash: 353830.0 usec.
=> Average lookup time: 2.2114375 usec/word.
==================
Time to insert 160000 words into a Ruby Hash: 397741.0 usec.
=> Average insertion time: 2.48588125 usec/insertion.
Time to look up 160000 words in a Ruby Hash: 285617.0 usec.
=> Average lookup time: 1.78510625 usec/word.
Time to insert 640000 words into a JudySL array: 1390958.0 usec.
=> Average insertion time: 2.173371875 usec/insertion.
Time to look up 640000 words in a JudySL array: 1023863.0 usec.
=> Average lookup time: 1.5997859375 usec/word.
==================
Time to insert 640000 words into a JudyHash: 1636917.0 usec.
=> Average insertion time: 2.5576828125 usec/insertion.
Time to look up 640000 words in a JudyHash: 1491516 usec.
=> Average lookup time: 2.33049375 usec/word.
==================
Time to insert 640000 words into a Ruby Hash: 1741098.0 usec.
=> Average insertion time: 2.720465625 usec/insertion.
Time to look up 640000 words in a Ruby Hash: 1309702 usec.
=> Average lookup time: 2.046409375000001 usec/word.
batsman@kodos:~/src/cvs/ruby-judy$
--
_ _
| |__ __ _| |_ ___ _ __ ___ __ _ _ __
| '_ \ / _` | __/ __| '_ ` _ \ / _` | '_ \
| |_) | (_| | |_\__ \ | | | | | (_| | | | |
|_.__/ \__,_|\__|___/_| |_| |_|\__,_|_| |_|
Running Debian GNU/Linux Sid (unstable)
batsman dot geo at yahoo dot com
Why use Windows when you can have air conditioning?
Why use Windows, when you can leave through the door?
-- Konrad Blum
Attachments (1)
diff -rwdu ruby/configure.in ruby-judy/configure.in
--- ruby/configure.in Sun Aug 11 23:43:24 2002
+++ ruby-judy/configure.in Tue Aug 27 17:46:42 2002
@@ -281,6 +281,7 @@
AC_CHECK_LIB(crypt, crypt)
AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV
AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX
+AC_CHECK_LIB(Judy, JudyLIns) # Judy
dnl Checks for header files.
AC_HEADER_DIRENT
diff -rwdu ruby/hash.c ruby-judy/hash.c
--- ruby/hash.c Wed Jul 31 00:30:17 2002
+++ ruby-judy/hash.c Wed Aug 28 03:15:01 2002
@@ -125,11 +125,10 @@
{
int status;
st_table *tbl = RHASH(arg->hash)->tbl;
- struct st_table_entry **bins = tbl->bins;
if (key == Qundef) return ST_CONTINUE;
status = (*arg->func)(key, value, arg->arg);
- if (RHASH(arg->hash)->tbl != tbl || RHASH(arg->hash)->tbl->bins != bins){
+ if (RHASH(arg->hash)->tbl != tbl){
rb_raise(rb_eIndexError, "rehash occurred during iteration");
}
return status;
diff -rwdu ruby/st.c ruby-judy/st.c
--- ruby/st.c Wed Jul 31 00:30:20 2002
+++ ruby-judy/st.c Wed Aug 28 03:38:02 2002
@@ -11,27 +11,16 @@
#include <malloc.h>
#endif
+#include <Judy.h>
+
typedef struct st_table_entry st_table_entry;
struct st_table_entry {
- unsigned int hash;
char *key;
char *record;
st_table_entry *next;
};
-#define ST_DEFAULT_MAX_DENSITY 5
-#define ST_DEFAULT_INIT_TABLE_SIZE 11
-
- /*
- * DEFAULT_MAX_DENSITY is the default for the largest we allow the
- * average number of items per bin before increasing the number of
- * bins
- *
- * DEFAULT_INIT_TABLE_SIZE is the default for the number of bins
- * allocated initially
- *
- */
static int numcmp();
static int numhash();
static struct st_hash_type type_numhash = {
@@ -66,73 +55,14 @@
#define EQUAL(table,x,y) ((x)==(y) || (*table->type->compare)((x),(y)) == 0)
#define do_hash(key,table) (unsigned int)(*(table)->type->hash)((key))
-#define do_hash_bin(key,table) (do_hash(key, table)%(table)->num_bins)
-
-/*
- * MINSIZE is the minimum size of a dictionary.
- */
-
-#define MINSIZE 8
-
-/*
-Table of prime numbers 2^n+a, 2<=n<=30.
-*/
-static long primes[] = {
- 8 + 3,
- 16 + 3,
- 32 + 5,
- 64 + 3,
- 128 + 3,
- 256 + 27,
- 512 + 9,
- 1024 + 9,
- 2048 + 5,
- 4096 + 3,
- 8192 + 27,
- 16384 + 43,
- 32768 + 3,
- 65536 + 45,
- 131072 + 29,
- 262144 + 3,
- 524288 + 21,
- 1048576 + 7,
- 2097152 + 17,
- 4194304 + 15,
- 8388608 + 9,
- 16777216 + 43,
- 33554432 + 35,
- 67108864 + 15,
- 134217728 + 29,
- 268435456 + 3,
- 536870912 + 11,
- 1073741824 + 85,
- 0
-};
+#define do_hash_bin(key,table) (do_hash(key, table) % HASHSIZE)
-static int
-new_size(size)
- int size;
-{
- int i;
+#define HASHARRAY(table,code) ((table)->PJLArray[(code) % HASHSIZE])
+#define HASHINDEX(code) ((code)/HASHSIZE)
+#define HASHNODE(ppv) (* (st_table_entry **)ppv)
+#define NEWNODE(ppv) *(ppv) = calloc(1, sizeof(st_table_entry))
-#if 0
- for (i=3; i<31; i++) {
- if ((1<<i) > size) return 1<<i;
- }
- return -1;
-#else
- int newsize;
- for (i = 0, newsize = MINSIZE;
- i < sizeof(primes)/sizeof(primes[0]);
- i++, newsize <<= 1)
- {
- if (newsize > size) return primes[i];
- }
- /* Ran out of polynomials */
- return -1; /* should raise exception */
-#endif
-}
#ifdef HASH_LOG
static int collision = 0;
@@ -153,6 +83,12 @@
int size;
{
st_table *tbl;
+ int i;
+
+ tbl = alloc(st_table);
+ //FIXME: optimize
+ for ( i = 0; i < HASHSIZE; i++ )
+ tbl->PJLArray[i] = 0;
#ifdef HASH_LOG
if (init_st == 0) {
@@ -161,13 +97,8 @@
}
#endif
- size = new_size(size); /* round up to prime number */
-
- tbl = alloc(st_table);
tbl->type = type;
tbl->num_entries = 0;
- tbl->num_bins = size;
- tbl->bins = (st_table_entry **)Calloc(size, sizeof(st_table_entry*));
return tbl;
}
@@ -211,21 +142,28 @@
{
register st_table_entry *ptr, *next;
int i;
+ PPvoid_t PValue;
+ Word_t Index;
+ st_table_entry *pNode, *pTmp;
- for(i = 0; i < table->num_bins; i++) {
- ptr = table->bins[i];
- while (ptr != 0) {
- next = ptr->next;
- free(ptr);
- ptr = next;
+ for(i = 0; i < HASHSIZE; i++) {
+ Index = 0;
+ PValue = JudyLFirst(table->PJLArray[i], &Index, PJE0);
+ while (PValue) {
+ // go through all the positions inside the Judy array
+ pNode = HASHNODE(PValue);
+ while (pNode) { // clear the collision list
+ pTmp = pNode;
+ pNode = pNode->next;
+ free(pTmp);
}
+ PValue = JudyLNext(table->PJLArray[i], &Index, PJE0);
}
- free(table->bins);
- free(table);
+ JudyLFreeArray(&table->PJLArray[i], PJE0);
}
-#define PTR_NOT_EQUAL(table, ptr, hash_val, key) \
-((ptr) != 0 && (ptr->hash != (hash_val) || !EQUAL((table), (key), (ptr)->key)))
+ free(table);
+}
#ifdef HASH_LOG
#define COLLISION collision++
@@ -234,14 +172,17 @@
#endif
#define FIND_ENTRY(table, ptr, hash_val, bin_pos) do {\
- bin_pos = hash_val%(table)->num_bins;\
- ptr = (table)->bins[bin_pos];\
- if (PTR_NOT_EQUAL(table, ptr, hash_val, key)) {\
- COLLISION;\
- while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\
- ptr = ptr->next;\
+ PPvoid_t PValue;\
+ \
+ bin_pos = HASHINDEX(hash_val);\
+ PValue = JudyLGet(HASHARRAY(table,hash_val), bin_pos, PJE0);\
+ if (PValue) {\
+ for ( ptr = HASHNODE(PValue); ptr; ptr = ptr->next)\
+ if ( EQUAL(table, ptr->key, key) ) \
+ break;\
}\
- ptr = ptr->next;\
+ else {\
+ ptr = 0;\
}\
} while (0)
@@ -269,18 +210,15 @@
#define ADD_DIRECT(table, key, value, hash_val, bin_pos)\
do {\
st_table_entry *entry;\
- if (table->num_entries/(table->num_bins) > ST_DEFAULT_MAX_DENSITY) {\
- rehash(table);\
- bin_pos = hash_val % table->num_bins;\
- }\
+ PPvoid_t PValue;\
\
- entry = alloc(st_table_entry);\
+ PValue = JudyLIns(&HASHARRAY(table,hash_val), bin_pos, PJE0);\
\
- entry->hash = hash_val;\
+ entry = alloc(st_table_entry);\
entry->key = key;\
entry->record = value;\
- entry->next = table->bins[bin_pos];\
- table->bins[bin_pos] = entry;\
+ entry->next = HASHNODE(PValue);\
+ *PValue = entry;\
table->num_entries++;\
} while (0)
@@ -292,17 +230,32 @@
{
unsigned int hash_val, bin_pos;
register st_table_entry *ptr;
+ PPvoid_t PValue;
- hash_val = do_hash(key, table);
- FIND_ENTRY(table, ptr, hash_val, bin_pos);
- if (ptr == 0) {
- ADD_DIRECT(table, key, value, hash_val, bin_pos);
+ hash_val = do_hash(key, table);
+ PValue = JudyLIns( &HASHARRAY(table, hash_val), HASHINDEX(hash_val), PJE0);
+ if ( *PValue ) {
+ for ( ptr = HASHNODE(PValue); ptr; ptr = ptr->next )
+ if ( EQUAL(table, ptr->key, key) ) {
+ ptr->record = value;
+ return 1;
+ }
+ ptr = alloc(st_table_entry);
+ ptr->key = key;
+ ptr->record = value;
+ ptr->next = *PValue;
+ *PValue = ptr;
+ ++table->num_entries;
return 0;
}
else {
- ptr->record = value;
- return 1;
+ *PValue = alloc(st_table_entry);
+ HASHNODE(PValue)->key = key;
+ HASHNODE(PValue)->record = value;
+ HASHNODE(PValue)->next = 0;
+ ++table->num_entries;
+ return 0;
}
}
@@ -315,72 +268,47 @@
unsigned int hash_val, bin_pos;
hash_val = do_hash(key, table);
- bin_pos = hash_val % table->num_bins;
+ bin_pos = HASHINDEX(hash_val);
ADD_DIRECT(table, key, value, hash_val, bin_pos);
}
-static void
-rehash(table)
- register st_table *table;
-{
- register st_table_entry *ptr, *next, **new_bins;
- int i, old_num_bins = table->num_bins, new_num_bins;
- unsigned int hash_val;
-
- new_num_bins = new_size(old_num_bins+1);
- new_bins = (st_table_entry**)Calloc(new_num_bins, sizeof(st_table_entry*));
-
- for(i = 0; i < old_num_bins; i++) {
- ptr = table->bins[i];
- while (ptr != 0) {
- next = ptr->next;
- hash_val = ptr->hash % new_num_bins;
- ptr->next = new_bins[hash_val];
- new_bins[hash_val] = ptr;
- ptr = next;
- }
- }
- free(table->bins);
- table->num_bins = new_num_bins;
- table->bins = new_bins;
-}
-
st_table*
st_copy(old_table)
st_table *old_table;
{
st_table *new_table;
- st_table_entry *ptr, *entry;
- int i, num_bins = old_table->num_bins;
+ st_table_entry *oldptr, *ptr, **entry;
+ PPvoid_t PValue;
+ Word_t Index;
+ int i;
- new_table = alloc(st_table);
+ new_table = st_init_table( old_table->type );
if (new_table == 0) {
return 0;
}
- *new_table = *old_table;
- new_table->bins = (st_table_entry**)
- Calloc((unsigned)num_bins, sizeof(st_table_entry*));
+ new_table->num_entries = old_table->num_entries;
- if (new_table->bins == 0) {
- free(new_table);
- return 0;
+ for(i = 0; i < HASHSIZE; i++) {
+ Index = 0;
+ PValue = JudyLFirst(old_table->PJLArray[i], &Index, PJE0);
+ while( PValue ) {
+ if ( *PValue ) {
+ entry = (st_table_entry **) JudyLIns(&new_table->PJLArray[i], Index, PJE0 );
+ *entry = alloc(st_table_entry);
+ (*entry)->key = HASHNODE(PValue)->key;
+ (*entry)->record = HASHNODE(PValue)->record;
+ (*entry)->next = 0;
+ for (oldptr = HASHNODE(PValue)->next; oldptr; oldptr = oldptr->next) {
+ ptr = alloc(st_table_entry);
+ // FIXME: check error in memory allocation
+ ptr->key = ptr->key;
+ ptr->record = ptr->record;
+ ptr->next = *entry;
+ *entry = ptr;
}
-
- for(i = 0; i < num_bins; i++) {
- new_table->bins[i] = 0;
- ptr = old_table->bins[i];
- while (ptr != 0) {
- entry = alloc(st_table_entry);
- if (entry == 0) {
- free(new_table->bins);
- free(new_table);
- return 0;
}
- *entry = *ptr;
- entry->next = new_table->bins[i];
- new_table->bins[i] = entry;
- ptr = ptr->next;
+ PValue = JudyLNext(old_table->PJLArray[i], &Index, PJE0);
}
}
return new_table;
@@ -394,33 +322,27 @@
{
unsigned int hash_val;
st_table_entry *tmp;
- register st_table_entry *ptr;
+ register st_table_entry **ptr, *ptr2;
hash_val = do_hash_bin(*key, table);
- ptr = table->bins[hash_val];
-
+ ptr = (st_table_entry **) JudyLGet(HASHARRAY(table, hash_val),
+ HASHINDEX(hash_val), PJE0);
if (ptr == 0) {
if (value != 0) *value = 0;
return 0;
}
- if (EQUAL(table, *key, ptr->key)) {
- table->bins[hash_val] = ptr->next;
- table->num_entries--;
- if (value != 0) *value = ptr->record;
- *key = ptr->key;
- free(ptr);
- return 1;
- }
-
- for(; ptr->next != 0; ptr = ptr->next) {
- if (EQUAL(table, ptr->next->key, *key)) {
- tmp = ptr->next;
- ptr->next = ptr->next->next;
- table->num_entries--;
- if (value != 0) *value = tmp->record;
- *key = tmp->key;
- free(tmp);
+ for( tmp = 0, ptr2 = *ptr; ptr2; tmp = ptr2, ptr2 = ptr2->next ) {
+ if (EQUAL(table, ptr2->key, *key)) {
+ if(value) *value = ptr2->record;
+ if(tmp)
+ tmp->next = ptr2->next;
+ else // head of the list
+ *ptr = ptr2->next;
+ free( ptr2 );
+ if ( ! *ptr )
+ JudyLDel(&HASHARRAY(table,hash_val), HASHINDEX(hash_val), PJE0);
+ --table->num_entries;
return 1;
}
}
@@ -437,15 +359,17 @@
{
unsigned int hash_val;
register st_table_entry *ptr;
+ PPvoid_t pValue;
hash_val = do_hash_bin(*key, table);
- ptr = table->bins[hash_val];
+ pValue = JudyLGet(HASHARRAY(table,hash_val), HASHINDEX(hash_val), PJE0);
- if (ptr == 0) {
+ if (pValue == 0) {
if (value != 0) *value = 0;
return 0;
}
+ ptr = HASHNODE(pValue);
for(; ptr != 0; ptr = ptr->next) {
if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) {
table->num_entries--;
@@ -485,12 +409,20 @@
char *arg;
{
st_table_entry *ptr, *last, *tmp;
+ PPvoid_t PValue;
+ Word_t Index;
enum st_retval retval;
int i;
- for(i = 0; i < table->num_bins; i++) {
+ for(i = 0; i < HASHSIZE; i++) {
last = 0;
- for(ptr = table->bins[i]; ptr != 0;) {
+ Index = 0;
+ if ( table->PJLArray[i] == 0 ) // empty JudyL array
+ continue;
+ PValue = JudyLFirst(table->PJLArray[i], &Index, PJE0);
+ while ( PValue ) {
+ ptr = HASHNODE(PValue);
+ while ( ptr != 0 ) {
retval = (*func)(ptr->key, ptr->record, arg);
switch (retval) {
case ST_CONTINUE:
@@ -502,7 +434,7 @@
case ST_DELETE:
tmp = ptr;
if (last == 0) {
- table->bins[i] = ptr->next;
+ HASHNODE(PValue) = ptr->next;
}
else {
last->next = ptr->next;
@@ -510,9 +442,11 @@
ptr = ptr->next;
free(tmp);
table->num_entries--;
- }
- }
- }
+ } // switch
+ } // while to scan collision list
+ PValue = JudyLNext(table->PJLArray[i], &Index, PJE0);
+ } // while to scan Judy array
+ } // for
}
static int
diff -rwdu ruby/st.h ruby-judy/st.h
--- ruby/st.h Wed Jan 5 05:37:12 2000
+++ ruby-judy/st.h Wed Aug 28 01:19:43 2002
@@ -6,6 +6,8 @@
#define ST_INCLUDED
+#include <Judy.h>
+
typedef struct st_table st_table;
struct st_hash_type {
@@ -13,11 +15,14 @@
int (*hash)();
};
+#define HASHSIZE 256
+#define LOG_HASHSIZE 8
+// make these coherent
+
struct st_table {
struct st_hash_type *type;
- int num_bins;
int num_entries;
- struct st_table_entry **bins;
+ Pvoid_t PJLArray[HASHSIZE];
};
#define st_is_member(table,key) st_lookup(table,key,(char **)0)