Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
* hashtables for mutable records
@ 2000-04-27 13:28 Coscoy, Yann
  2000-04-27 17:56 ` Pierre Weis
  2000-04-28  1:12 ` Jacques Garrigue
  0 siblings, 2 replies; 4+ messages in thread
From: Coscoy, Yann @ 2000-04-27 13:28 UTC (permalink / raw)
  To: 'caml-list@inria.fr'


    Hello,

I want to do an hashtable on mutable and polymorphic records. Standard
module Hashtbl is not suitable because:
  - Hashtbl.HashType doesn't accept polymorphic types.
  - Hashtbl.hash is susceptible to setups of a mutable fields.

I would appreciate any suggestion.

  Cheers,

       Yann Coscoy

---------------------------------------------------------------------
Yann Coscoy
Informatique CDC - Direction des Techniques Avancées
4, rue Berthollet
94110 Arcueil
Tél. : 01 40 49 15 28
Fax. : 01 40 49 15 78
e-mail : Yann.Coscoy@icdc.caissedesdepots.fr




^ permalink raw reply	[flat|nested] 4+ messages in thread
* RE: hashtables for mutable records
@ 2000-04-28  8:14 Coscoy, Yann
  0 siblings, 0 replies; 4+ messages in thread
From: Coscoy, Yann @ 2000-04-28  8:14 UTC (permalink / raw)
  To: caml-list

  Hello,

Pierre Weis wrote :

> You can use a unique integer field into your records 

  It is the solution I use. But, I dislike it because it makes necessary to
embed the record in some abstract type. (You must hide the constructor of
the recors to guaranty the uniqueness of the integer.)

> Of course you must use your own hashing function that just reads this
fixed integer field.

  I can do that, but it make impossible to use Hashtbl.Make because of the
poymorphism of the record. 

> As of polymorphism, if your problem is just to have keys or values
> belonging to a parameterized data type, you can directly use the
> creation and manipulation functions from the Hashtbl module
> (Hashtbl.create, Hashtbl.add, etc): they accept to manipulate
> polymorphic tables. Since usage of these functions with a user defined
> hash function is not available from the Hashtbl module, you should
> rewrite some parts of its code into your own hash table module.

I know I can solve my problem in this way. But I don't think that "cut,
paste, and patch the stdlib" is a good practice. So, I prefer to use the
integer itself as the key of hashtable and use the standard Hash module.

I partial solution would be to have another functor Make1 in module Hashtbl
with type 'a key. (It is just a partial solution, because it doesn't solve
the problem for type ('a, 'b) key and type ('a, 'b, 'c) key.)

 Yann coscoy

PS: the signature of this Make1 functor:

module type HashedType1 =
  sig
    type 'a t
    val equal: 'a t -> 'a t -> bool
    val hash: 'a t -> int
  end
  
module type S1 =
  sig
    type 'a key
    type ('a, 'b) t
    val create: int -> ('a, 'b) t
    val clear: ('a, 'b) t -> unit
    val add: ('a, 'b) t -> 'a key -> 'b -> unit
    val remove: ('a, 'b) t -> 'a key -> unit
  .....




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2000-04-28 10:17 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-04-27 13:28 hashtables for mutable records Coscoy, Yann
2000-04-27 17:56 ` Pierre Weis
2000-04-28  1:12 ` Jacques Garrigue
2000-04-28  8:14 Coscoy, Yann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox