--Multipart_Tue_Mar_28_14:09:10_2000-1
Content-Type: text/plain; charset=US-ASCII

There seems really to be a bug! DBM#invert will build a hash during
execution that contains all values as keys and the keys as
values. That means your demo 'mdb.each { ... }' should return:

1--a
2--b

But the bug seems to be that DBM#invert returns the DBM instance
itself instead of the new-created hash! So in your example DBM#each is
called instead of Hash#each.

The same is true for GDBM!

Applying following patches should help:


--Multipart_Tue_Mar_28_14:09:10_2000-1
Content-Type: application/octet-stream; type=patch
Content-Disposition: attachment; filename="dbm.c.patch"
Content-Transfer-Encoding: quoted-printable

*** ext/dbm/dbm.c_sv	Tue Mar  7 09:37:52 2000
--- ext/dbm/dbm.c	Tue Mar 28 13:57:05 2000
***************
*** 262,268 ****
  	valstr = rb_tainted_str_new(val.dptr, val.dsize);
  	rb_hash_aset(hash, valstr, keystr);
      }
!     return obj;
  }
  tatic VALUE
--- 262,268 ----
  	valstr = rb_tainted_str_new(val.dptr, val.dsize);
  	rb_hash_aset(hash, valstr, keystr);
      }
!     return hash;
  }
  tatic VALUE

--Multipart_Tue_Mar_28_14:09:10_2000-1
Content-Type: text/plain; charset=US-ASCII



--Multipart_Tue_Mar_28_14:09:10_2000-1
Content-Type: application/octet-stream; type=patch
Content-Disposition: attachment; filename="gdbm.c.patch"
Content-Transfer-Encoding: quoted-printable

*** ext/gdbm/gdbm.c_sv	Tue Mar  7 09:37:53 2000
--- ext/gdbm/gdbm.c	Tue Mar 28 13:57:37 2000
***************
*** 260,266 ****
  	valstr = rb_tainted_str_new(val.dptr, val.dsize);
  	rb_hash_aset(hash, valstr, keystr);
      }
!     return obj;
  }
  tatic VALUE
--- 260,266 ----
  	valstr = rb_tainted_str_new(val.dptr, val.dsize);
  	rb_hash_aset(hash, valstr, keystr);
      }
!     return hash;
  }
  tatic VALUE

--Multipart_Tue_Mar_28_14:09:10_2000-1
Content-Type: text/plain; charset=US-ASCII



HTH,
\cle


ts writes:
> 
>  classes *DBM has a method #invert, but this method don't seem to work or
>  I've not understood how to use it :
> 
> pigeon% cat b.rb
> #!/usr/bin/ruby
> require "gdbm"
> dbm  DBM.open("toto")
> dbm["a"]  1"
> dbm["b"]  2"
> dbm.each { |x, y| print "#{x}--#{y}\n" }
> mbd  bm.invert
> mbd.each { |x, y| print "#{x}--#{y}\n" }
> dbm.close
> pigeon% b.rb
> a--1
> b--2
> a--1
> b--2
> pigeon% 
> 
> 
> Guy Decoux

-- 
Clemens Hintze  mailto: c.hintze / gmx.net

--Multipart_Tue_Mar_28_14:09:10_2000-1--