Commits

Anonymous committed c8611b6

Submit cf-0.2 release.

  • Participants
  • Parent commits 2b03c09

Comments (0)

Files changed (8)

+cf_common_p.o: cf_common_p.c cf_common_p.h \
+  /usr/local/lib/ocaml/caml/alloc.h /usr/local/lib/ocaml/caml/misc.h \
+  /usr/local/lib/ocaml/caml/config.h /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h
+cf_ip4_addr_p.o: cf_ip4_addr_p.c cf_ip4_addr_p.h cf_common_p.h \
+  /usr/local/lib/ocaml/caml/alloc.h /usr/local/lib/ocaml/caml/misc.h \
+  /usr/local/lib/ocaml/caml/config.h /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h
+cf_ip4_proto_p.o: cf_ip4_proto_p.c cf_ip4_proto_p.h cf_ip_common_p.h \
+  cf_ip4_addr_p.h cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
+  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
+  /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h cf_ip6_addr_p.h cf_socket_p.h
+cf_ip6_addr_p.o: cf_ip6_addr_p.c cf_ip6_addr_p.h cf_common_p.h \
+  /usr/local/lib/ocaml/caml/alloc.h /usr/local/lib/ocaml/caml/misc.h \
+  /usr/local/lib/ocaml/caml/config.h /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h cf_ip4_addr_p.h
+cf_ip6_proto_p.o: cf_ip6_proto_p.c cf_ip6_proto_p.h cf_ip_common_p.h \
+  cf_ip4_addr_p.h cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
+  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
+  /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h cf_ip6_addr_p.h cf_socket_p.h
+cf_ip_common_p.o: cf_ip_common_p.c cf_ip_common_p.h cf_ip4_addr_p.h \
+  cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
+  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
+  /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h cf_ip6_addr_p.h cf_socket_p.h
+cf_nameinfo_p.o: cf_nameinfo_p.c cf_nameinfo_p.h cf_socket_p.h \
+  cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
+  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
+  /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h
+cf_netif_p.o: cf_netif_p.c cf_netif_p.h cf_common_p.h \
+  /usr/local/lib/ocaml/caml/alloc.h /usr/local/lib/ocaml/caml/misc.h \
+  /usr/local/lib/ocaml/caml/config.h /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h
+cf_sock_dgram_p.o: cf_sock_dgram_p.c cf_sock_dgram_p.h cf_socket_p.h \
+  cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
+  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
+  /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h
+cf_sock_stream_p.o: cf_sock_stream_p.c cf_sock_stream_p.h cf_socket_p.h \
+  cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
+  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
+  /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h
+cf_socket_p.o: cf_socket_p.c cf_socket_p.h cf_common_p.h \
+  /usr/local/lib/ocaml/caml/alloc.h /usr/local/lib/ocaml/caml/misc.h \
+  /usr/local/lib/ocaml/caml/config.h /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h
+cf_tai64_p.o: cf_tai64_p.c cf_tai64_p.h cf_common_p.h \
+  /usr/local/lib/ocaml/caml/alloc.h /usr/local/lib/ocaml/caml/misc.h \
+  /usr/local/lib/ocaml/caml/config.h /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h
+cf_tai64n_p.o: cf_tai64n_p.c cf_tai64n_p.h cf_tai64_p.h cf_common_p.h \
+  /usr/local/lib/ocaml/caml/alloc.h /usr/local/lib/ocaml/caml/misc.h \
+  /usr/local/lib/ocaml/caml/config.h /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h
+cf_xxxxx_p.o: cf_xxxxx_p.c cf_xxxxx_p.h cf_common_p.h \
+  /usr/local/lib/ocaml/caml/alloc.h /usr/local/lib/ocaml/caml/misc.h \
+  /usr/local/lib/ocaml/caml/config.h /usr/local/lib/ocaml/caml/mlvalues.h \
+  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
+  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
+  /usr/local/lib/ocaml/caml/memory.h
+cf_deque.cmi: cf_seq.cmi 
+cf_dfa.cmi: cf_parser.cmi cf_seq.cmi 
+cf_flow.cmi: cf_cmonad.cmi cf_either.cmi cf_scmonad.cmi cf_seq.cmi 
+cf_gadget.cmi: cf_cmonad.cmi cf_flow.cmi cf_map.cmi cf_set.cmi 
+cf_heap.cmi: cf_seq.cmi 
+cf_ip4_addr.cmi: cf_seq.cmi 
+cf_ip4_proto.cmi: cf_ip4_addr.cmi cf_socket.cmi 
+cf_ip6_addr.cmi: cf_ip4_addr.cmi 
+cf_ip6_proto.cmi: cf_ip4_addr.cmi cf_ip6_addr.cmi cf_socket.cmi 
+cf_ip_common.cmi: cf_socket.cmi 
+cf_lexer.cmi: cf_parser.cmi cf_seq.cmi 
+cf_map.cmi: cf_seq.cmi 
+cf_message.cmi: cf_seq.cmi 
+cf_nameinfo.cmi: cf_socket.cmi 
+cf_parser.cmi: cf_seq.cmi 
+cf_poll.cmi: cf_tai64n.cmi 
+cf_pqueue.cmi: cf_seq.cmi 
+cf_rbtree.cmi: cf_map.cmi cf_ordered.cmi cf_set.cmi 
+cf_sbheap.cmi: cf_heap.cmi cf_ordered.cmi cf_pqueue.cmi 
+cf_scmonad.cmi: cf_cmonad.cmi 
+cf_seq.cmi: cf_cmonad.cmi cf_scmonad.cmi cf_smonad.cmi 
+cf_set.cmi: cf_seq.cmi 
+cf_sock_common.cmi: cf_socket.cmi 
+cf_sock_dgram.cmi: cf_sock_common.cmi cf_socket.cmi 
+cf_sock_stream.cmi: cf_sock_common.cmi cf_socket.cmi 
+cf_stdtime.cmi: cf_tai64.cmi 
+cf_tai64n.cmi: cf_tai64.cmi 
+cf_tcp4_socket.cmi: cf_ip4_proto.cmi cf_sock_stream.cmi 
+cf_tcp6_socket.cmi: cf_ip6_proto.cmi cf_sock_stream.cmi 
+cf_udp4_socket.cmi: cf_ip4_proto.cmi cf_sock_dgram.cmi 
+cf_udp6_socket.cmi: cf_ip6_proto.cmi cf_sock_dgram.cmi 
+cf_unicode.cmi: cf_flow.cmi cf_seq.cmi 
+cf_uri.cmi: cf_ip4_addr.cmi cf_message.cmi 
+cf_cmonad.cmo: cf_cmonad.cmi 
+cf_cmonad.cmx: cf_cmonad.cmi 
+cf_deque.cmo: cf_seq.cmi cf_deque.cmi 
+cf_deque.cmx: cf_seq.cmx cf_deque.cmi 
+cf_dfa.cmo: cf_ordered.cmi cf_parser.cmi cf_rbtree.cmi cf_seq.cmi cf_dfa.cmi 
+cf_dfa.cmx: cf_ordered.cmx cf_parser.cmx cf_rbtree.cmx cf_seq.cmx cf_dfa.cmi 
+cf_either.cmo: cf_either.cmi 
+cf_either.cmx: cf_either.cmi 
+cf_exnopt.cmo: cf_exnopt.cmi 
+cf_exnopt.cmx: cf_exnopt.cmi 
+cf_flow.cmo: cf_deque.cmi cf_either.cmi cf_seq.cmi cf_flow.cmi 
+cf_flow.cmx: cf_deque.cmx cf_either.cmx cf_seq.cmx cf_flow.cmi 
+cf_gadget.cmo: cf_cmonad.cmi cf_flow.cmi cf_ordered.cmi cf_rbtree.cmi \
+    cf_seq.cmi cf_gadget.cmi 
+cf_gadget.cmx: cf_cmonad.cmx cf_flow.cmx cf_ordered.cmx cf_rbtree.cmx \
+    cf_seq.cmx cf_gadget.cmi 
+cf_gregorian.cmo: cf_gregorian.cmi 
+cf_gregorian.cmx: cf_gregorian.cmi 
+cf_heap.cmo: cf_seq.cmi cf_heap.cmi 
+cf_heap.cmx: cf_seq.cmx cf_heap.cmi 
+cf_ip4_addr.cmo: cf_seq.cmi cf_ip4_addr.cmi 
+cf_ip4_addr.cmx: cf_seq.cmx cf_ip4_addr.cmi 
+cf_ip4_proto.cmo: cf_ip4_addr.cmi cf_socket.cmi cf_ip4_proto.cmi 
+cf_ip4_proto.cmx: cf_ip4_addr.cmx cf_socket.cmx cf_ip4_proto.cmi 
+cf_ip6_addr.cmo: cf_ip4_addr.cmi cf_ip6_addr.cmi 
+cf_ip6_addr.cmx: cf_ip4_addr.cmx cf_ip6_addr.cmi 
+cf_ip6_proto.cmo: cf_ip4_addr.cmi cf_ip6_addr.cmi cf_socket.cmi \
+    cf_ip6_proto.cmi 
+cf_ip6_proto.cmx: cf_ip4_addr.cmx cf_ip6_addr.cmx cf_socket.cmx \
+    cf_ip6_proto.cmi 
+cf_ip_common.cmo: cf_socket.cmi cf_ip_common.cmi 
+cf_ip_common.cmx: cf_socket.cmx cf_ip_common.cmi 
+cf_lexer.cmo: cf_dfa.cmi cf_parser.cmi cf_seq.cmi cf_lexer.cmi 
+cf_lexer.cmx: cf_dfa.cmx cf_parser.cmx cf_seq.cmx cf_lexer.cmi 
+cf_map.cmo: cf_seq.cmi cf_map.cmi 
+cf_map.cmx: cf_seq.cmx cf_map.cmi 
+cf_message.cmo: cf_seq.cmi cf_message.cmi 
+cf_message.cmx: cf_seq.cmx cf_message.cmi 
+cf_nameinfo.cmo: cf_socket.cmi cf_nameinfo.cmi 
+cf_nameinfo.cmx: cf_socket.cmx cf_nameinfo.cmi 
+cf_netif.cmo: cf_netif.cmi 
+cf_netif.cmx: cf_netif.cmi 
+cf_ordered.cmo: cf_ordered.cmi 
+cf_ordered.cmx: cf_ordered.cmi 
+cf_parser.cmo: cf_seq.cmi cf_parser.cmi 
+cf_parser.cmx: cf_seq.cmx cf_parser.cmi 
+cf_poll.cmo: cf_deque.cmi cf_ordered.cmi cf_rbtree.cmi cf_sbheap.cmi \
+    cf_seq.cmi cf_tai64n.cmi cf_poll.cmi 
+cf_poll.cmx: cf_deque.cmx cf_ordered.cmx cf_rbtree.cmx cf_sbheap.cmx \
+    cf_seq.cmx cf_tai64n.cmx cf_poll.cmi 
+cf_pqueue.cmo: cf_seq.cmi cf_pqueue.cmi 
+cf_pqueue.cmx: cf_seq.cmx cf_pqueue.cmi 
+cf_rbtree.cmo: cf_ordered.cmi cf_seq.cmi cf_set.cmi cf_rbtree.cmi 
+cf_rbtree.cmx: cf_ordered.cmx cf_seq.cmx cf_set.cmx cf_rbtree.cmi 
+cf_sbheap.cmo: cf_ordered.cmi cf_seq.cmi cf_sbheap.cmi 
+cf_sbheap.cmx: cf_ordered.cmx cf_seq.cmx cf_sbheap.cmi 
+cf_scmonad.cmo: cf_cmonad.cmi cf_scmonad.cmi 
+cf_scmonad.cmx: cf_cmonad.cmx cf_scmonad.cmi 
+cf_seq.cmo: cf_cmonad.cmi cf_scmonad.cmi cf_smonad.cmi cf_seq.cmi 
+cf_seq.cmx: cf_cmonad.cmx cf_scmonad.cmx cf_smonad.cmx cf_seq.cmi 
+cf_set.cmo: cf_seq.cmi cf_set.cmi 
+cf_set.cmx: cf_seq.cmx cf_set.cmi 
+cf_smonad.cmo: cf_smonad.cmi 
+cf_smonad.cmx: cf_smonad.cmi 
+cf_sock_common.cmo: cf_socket.cmi cf_sock_common.cmi 
+cf_sock_common.cmx: cf_socket.cmx cf_sock_common.cmi 
+cf_sock_dgram.cmo: cf_sock_common.cmi cf_socket.cmi cf_sock_dgram.cmi 
+cf_sock_dgram.cmx: cf_sock_common.cmx cf_socket.cmx cf_sock_dgram.cmi 
+cf_sock_stream.cmo: cf_sock_common.cmi cf_socket.cmi cf_sock_stream.cmi 
+cf_sock_stream.cmx: cf_sock_common.cmx cf_socket.cmx cf_sock_stream.cmi 
+cf_socket.cmo: cf_socket.cmi 
+cf_socket.cmx: cf_socket.cmi 
+cf_stdtime.cmo: cf_gregorian.cmi cf_tai64.cmi cf_stdtime.cmi 
+cf_stdtime.cmx: cf_gregorian.cmx cf_tai64.cmx cf_stdtime.cmi 
+cf_tai64.cmo: cf_tai64.cmi 
+cf_tai64.cmx: cf_tai64.cmi 
+cf_tai64n.cmo: cf_tai64.cmi cf_tai64n.cmi 
+cf_tai64n.cmx: cf_tai64.cmx cf_tai64n.cmi 
+cf_tcp4_socket.cmo: cf_ip4_proto.cmi cf_ip_common.cmi cf_sock_stream.cmi \
+    cf_tcp4_socket.cmi 
+cf_tcp4_socket.cmx: cf_ip4_proto.cmx cf_ip_common.cmx cf_sock_stream.cmx \
+    cf_tcp4_socket.cmi 
+cf_tcp6_socket.cmo: cf_ip6_proto.cmi cf_ip_common.cmi cf_sock_stream.cmi \
+    cf_tcp6_socket.cmi 
+cf_tcp6_socket.cmx: cf_ip6_proto.cmx cf_ip_common.cmx cf_sock_stream.cmx \
+    cf_tcp6_socket.cmi 
+cf_udp4_socket.cmo: cf_ip4_proto.cmi cf_ip_common.cmi cf_sock_dgram.cmi \
+    cf_udp4_socket.cmi 
+cf_udp4_socket.cmx: cf_ip4_proto.cmx cf_ip_common.cmx cf_sock_dgram.cmx \
+    cf_udp4_socket.cmi 
+cf_udp6_socket.cmo: cf_ip6_proto.cmi cf_ip_common.cmi cf_sock_dgram.cmi \
+    cf_udp6_socket.cmi 
+cf_udp6_socket.cmx: cf_ip6_proto.cmx cf_ip_common.cmx cf_sock_dgram.cmx \
+    cf_udp6_socket.cmi 
+cf_unicode.cmo: cf_flow.cmi cf_seq.cmi cf_unicode.cmi 
+cf_unicode.cmx: cf_flow.cmx cf_seq.cmx cf_unicode.cmi 
+cf_uri.cmo: cf_flow.cmi cf_ip4_addr.cmi cf_lexer.cmi cf_message.cmi \
+    cf_parser.cmi cf_seq.cmi cf_uri.cmi 
+cf_uri.cmx: cf_flow.cmx cf_ip4_addr.cmx cf_lexer.cmx cf_message.cmx \
+    cf_parser.cmx cf_seq.cmx cf_uri.cmi 
+cf_xxxxx.cmo: cf_xxxxx.cmi 
+cf_xxxxx.cmx: cf_xxxxx.cmi 
+t/t_cf.cmo: cf_cmonad.cmi cf_deque.cmi cf_flow.cmi cf_gadget.cmi \
+    cf_gregorian.cmi cf_ip4_addr.cmi cf_ip6_addr.cmi cf_ip_common.cmi \
+    cf_lexer.cmi cf_message.cmi cf_ordered.cmi cf_parser.cmi cf_poll.cmi \
+    cf_rbtree.cmi cf_scmonad.cmi cf_seq.cmi cf_stdtime.cmi cf_tai64.cmi \
+    cf_tai64n.cmi cf_tcp4_socket.cmi cf_tcp6_socket.cmi cf_uri.cmi 
+t/t_cf.cmx: cf_cmonad.cmx cf_deque.cmx cf_flow.cmx cf_gadget.cmx \
+    cf_gregorian.cmx cf_ip4_addr.cmx cf_ip6_addr.cmx cf_ip_common.cmx \
+    cf_lexer.cmx cf_message.cmx cf_ordered.cmx cf_parser.cmx cf_poll.cmx \
+    cf_rbtree.cmx cf_scmonad.cmx cf_seq.cmx cf_stdtime.cmx cf_tai64.cmx \
+    cf_tai64n.cmx cf_tcp4_socket.cmx cf_tcp6_socket.cmx cf_uri.cmx 
+t/t_setbench.cmo: cf_ordered.cmi cf_tai64n.cmi 
+t/t_setbench.cmx: cf_ordered.cmx cf_tai64n.cmx 
 released versions of the library.
 
 
+===== Version 0.2 =====
+
+Highlights of the changes:
+
++ Major overhaul of [Cf_rbtree] to address serious performance issues (should
+  improve performance of [Cf_dfa], [Cf_lexer], [Cf_poll] and [Cf_gadget]).
++ Defined [Cf_set.T] and [Cf_map.T] module types for use in abstracting the
+  underlying algorithm behind sets and maps.
++ Added [Cf_seq.constrain] (and [Cf_seq.constrain2] for consistency).
++ Defined [Cf_heap.T] and [Cf_pqueue.T] module types for use in abstracting
+  the use of skew-binomial heaps as either a heap or a priority queue.
+  Reimplemented the interface to [Cf_sbheap] so it is consistent with the
+  new [Cf_rbtree] interface.
+
+--- [new files]
+    Added [Cf_heap], [Cf_map], [Cf_pqueue] (and changed the meaning of the
+    [Cf_set] module to be consistent).  These files all contain module types
+    for common data structure algorithms implemented in the {Cf} library.
+    Specific implementations are separated out into other modules.
+
+--- [Cf_rbtree]
+    Completely rewritten to address serious performance issues and to combine
+    the interface for both sets and maps.  Use the new [Cf_rbtree.Set(K)] and
+    [Cf_rbtree.Map(K)] functors.  Most functions now offer better performance
+    for smoothly distributed input than do the [Set] and [Map] modules in the
+    Ocaml standard library.  (Note: the [subset] function has been fixed so
+    that it considers its arguments in the same order as the standard library.)
+
+--- [Cf_sbheap]
+    Minor modifications to conform to the new [Cf_heap] and [Cf_pqueue] module
+    types.  Use the new [Cf_sbheap.Heap(K)] and [Cf_sbheap.PQueue(K)] functors.
+
+--- [Cf_ordered]
+    Removed the [KV_Pair_T] module type and its associated functor [KV_Pair],
+    since these types are unecessary.
+
+--- [Cf_seq]
+    Added the [constrain] and [constrain2] functions for constraining a
+    sequence to just those elements until the constraining function is false.
+
+--- [Cf_dfa Cf_gadget Cf_poll]
+    Modified to use the new [Cf_rbtree] and [Cf_sbheap] interface.
+
+--- [t_cf]
+    Added a new test case, that covers [Cf_flow.commute] and a few other
+    things.  (Test coverage is still abyssmally poor, if you ask me.)
+
 ===== Version 0.1 =====
 
 Highlights of the changes:
 Open issues in development:
 
-+ (Cf_socket_p): No support for WIN32.  SVR4 and Linux remain untested, but
-    portability has been substantially improved.
++ (Cf_socket_p): No support for WIN32.  SVR4 remains untested, but portability
+    has been substantially improved.  Suse Linux 9.0 works.
 
-+ (Cf_gadget): Need a better scheduling algorithm.  When a guard is fully
-    evaluated, its gates should be inserted into a queue tree, where
-    they can be matched in the transmit monad.  Be careful about collecting
-    gates when their transmit pins expire.
++ (Cf_socket and cognates): Support for sendmsg() and recvmsg(), and associated
+    IPv4 and IPv6 protocol options that use the control plane for various
+    advanced features of the network protocol stack.
 
-+ (Cf_tai64_p, Cf_tai64n_p): No support 32-bit environments where the C
++ (Cf_socket and cognates): Support for AF_UNIX.  To do this right, we need
+    support for the control plane using sendmsg() and recvmsg(), so we can have
+    file descriptor and user credential passing-- pretty much the only good
+    reasons to use AF_UNIX.
+
++ (Cf_tai64_p, Cf_tai64n_p): No support for 32-bit environments where the C
     compiler does not offer support for 64-bit integers with
     'unsigned long long'.
 
-+ (Cf_uri): Need function for converting an absolute path to a relative path
-    for a given base path.
-
 + (Cf_tai64,Cf_tai64n,Cf_stdtime): The leap seconds table is currently
     hard-coded into the .ml file here.  What we really need is an active daemon
     process that keeps a regular check on the IERS bulletins that announce leap
     expiration of the current IERS bulletin; and 2) optionally perform a
     calculation based on estimated drift between TAI and UTC.
 
++ (Cf_patricia): Is a generalized PATRICIA trie implementation a good idea?  If
+    so, is it a good idea to implement sets on both red-black binary trees and
+    on PATRICIA tries and see which one performs better.  Further research is
+    in order here.
+    
++ (Cf_int_patricia): An implementation of PATRICIA tries specialized for
+    integer keys is worth doing separately.  Integer sets implemented on
+    PATRICIA tries are probably the best way to get faster integer sets for the
+    [Cf_dfa] module.
+
++ (Cf_uri): Need function for converting an absolute path to a relative path
+    for a given base path.
+
++ (Cf_gadget): Need a better scheduling algorithm.  When a guard is fully
+    evaluated, its gates should be inserted into a queue tree, where
+    they can be matched in the transmit monad.  Be careful about collecting
+    gates when their transmit pins expire.
+
 + (Unimplemented): Support for I18N and locales.  Need timezones especially.
 
-+ (Unimplemented): Support for sendmsg() and recvmsg(), and associated IPv4 and
-    IPv6 protocol options that use the control plane for various advanced
-    features of the network protocol stack.
-
-+ (Unimplemented): Support for AF_UNIX.  To do this right, we need support for
-    the control plane using sendmsg() and recvmsg(), so we can have file
-    descriptor and user credential passing-- pretty much the only good reasons
-    to use AF_UNIX.
-
 # End of open issues
 # The following META file is a guess by ocamlfind:
 name="cf"
-version="0.1"
+version="0.2"
 description="Pagoda Core Foundation"
 requires="unix"
 archive(byte)="cf.cma"
 
 CF_MODULES = \
     ordered either exnopt smonad cmonad scmonad tai64 tai64n gregorian \
-	stdtime seq deque flow sbheap rbtree set gadget unicode parser message \
-	dfa lexer socket netif nameinfo sock_common sock_dgram sock_stream \
-	ip_common $(CF_ADDR_MODULES:%=%_addr) $(CF_PROTO_MODULES:%=%_proto) \
-	tcp4_socket tcp6_socket udp4_socket udp6_socket poll uri
+	stdtime seq deque flow heap pqueue map set sbheap rbtree gadget unicode \
+	parser message dfa lexer socket netif nameinfo sock_common sock_dgram \
+	sock_stream ip_common $(CF_ADDR_MODULES:%=%_addr) \
+	$(CF_PROTO_MODULES:%=%_proto) tcp4_socket tcp6_socket udp4_socket \
+	udp6_socket poll uri
 
 CF_PRIMITIVES = \
     common tai64 tai64n socket netif nameinfo sock_dgram sock_stream \
 
 ###############################################################################
 
-TEST_MODULES = cf # deq mirrord
+TEST_MODULES = cf # setbench deq
 
 TEST_PROGRAMS = $(TEST_MODULES:%=t.%)
 TEST_OPT_PROGRAMS = $(TEST_MODULES:%=t-opt.%)

File cf/cf_dfa.ml

     type t = int
 
     module Order = Cf_ordered.Int_order
-    module Tree = Cf_rbtree.Create(Order)
-    module Set = Cf_set.Create(Order)
+    module Map = Cf_rbtree.Map(Order)
+    module Set = Cf_rbtree.Set(Order)
 end
 
 type y = {
     y_counter_: int;
     y_first_: NFA_state.Set.t;
     y_last_: NFA_state.Set.t;
-    y_follow_: Obj.t NFA_state.Tree.t -> Obj.t NFA_state.Tree.t;
+    y_follow_: Obj.t NFA_state.Map.t -> Obj.t NFA_state.Map.t;
 }
 
 type x = {
 let nil_ =
     let cons i = {
         y_counter_ = i;
-        y_first_ = NFA_state.Set.null;
-        y_last_ = NFA_state.Set.null;
+        y_first_ = NFA_state.Set.nil;
+        y_last_ = NFA_state.Set.nil;
         y_follow_ = Obj.magic;
     }
     in {
 
 class virtual ['action] satisfier =
     object(_:'self)
-        val state_ = NFA_state.Set.null
+        val state_ = NFA_state.Set.nil
         
         method virtual edge: int -> NFA_state.Set.t -> NFA_state.Set.t
         method follow s = {< state_ = NFA_state.Set.union state_ s >}
             y_counter_ = succ i;
             y_first_ = s;
             y_last_ = s;
-            y_follow_ = Obj.magic (NFA_state.Tree.replace (i, n));
+            y_follow_ = Obj.magic (NFA_state.Map.replace (i, n));
         }
     in {
         x_null_ = false;
         let compare = Pervasives.compare
     end
 
-    module Tree = Cf_rbtree.Create(Order)
+    module Map = Cf_rbtree.Map(Order)
 end
 
 exception Unrecognized
             }
         
         let follow_fold_aux_ a w i =
-            assert (NFA_state.Tree.member i w);
-            let n = Obj.obj (NFA_state.Tree.search i w) in
+            assert (NFA_state.Map.member i w);
+            let n = Obj.obj (NFA_state.Map.search i w) in
             let _ = (n :> 'action satisfier) in
             let n = Obj.repr (n#follow a) in
-            NFA_state.Tree.replace (i, n) w
+            NFA_state.Map.replace (i, n) w
         
         let cat_follow_ y0 y1 w =
             let w = y0.y_follow_ w in
     
     let suspend_ x =
         let y = x.x_cons_ 0 in
-        let w = y.y_follow_ NFA_state.Tree.nil in
-        let h = ref DFA_state.Tree.nil in
+        let w = y.y_follow_ NFA_state.Map.nil in
+        let h = ref DFA_state.Map.nil in
         let g1 sym u p =
-            let n = Obj.obj (NFA_state.Tree.search p w) in
+            let n = Obj.obj (NFA_state.Map.search p w) in
             let _ = (n :> 'action #satisfier) in
             n#edge sym u
         in
         let g2 a p =
-            let n = Obj.obj (NFA_state.Tree.search p w) in
+            let n = Obj.obj (NFA_state.Map.search p w) in
             let _ = (n :> 'action #satisfier) in
             n#accept a
         in
         let rec state u =
             let edge i =
                 lazy begin
-                    let v = Array.fold_left (g1 i) NFA_state.Set.null u in
+                    let v = Array.fold_left (g1 i) NFA_state.Set.nil u in
                     if NFA_state.Set.empty v then raise Unrecognized;
-                    let u = Array.of_list (NFA_state.Set.elements v) in
-                    try DFA_state.Tree.search u !h with Not_found -> state u
+                    let u = Array.of_list (NFA_state.Set.to_list_incr v) in
+                    try DFA_state.Map.search u !h with Not_found -> state u
                 end
             in
             let s = {
                 s_accept_ = Array.fold_left g2 None u;
                 s_next_ = Array.init S.size edge;
             } in
-            h := DFA_state.Tree.replace (u, s) !h;
+            h := DFA_state.Map.replace (u, s) !h;
             s
         in
-        state (Array.of_list (NFA_state.Set.elements y.y_first_))
+        state (Array.of_list (NFA_state.Set.to_list_incr y.y_first_))
     
     let s_accept_ susp acc lim z0 =
         match susp.s_accept_ with

File cf/cf_gadget.ml

 module X = X_create(struct let tag = "Cf_gadget" end)
 *)
 
-module Int_map = Cf_rbtree.Create(Cf_ordered.Int_order)
+module Int_map = Cf_rbtree.Map(Cf_ordered.Int_order)
 
 type ('i, 'o) process0_t =
     k:('i, 'o) kernel_t -> (('i, 'o) Cf_flow.t, unit) Cf_cmonad.t
     let compare a b = b.x_id_ - a.x_id_
 end
 
-module Pin_map = Cf_rbtree.Create(Pin_order)
-module Pin_set = Cf_set.Create(Pin_order)
+module Pin_map = Cf_rbtree.Map(Pin_order)
+module Pin_set = Cf_rbtree.Set(Pin_order)
 
 let create_kernel_ () = {
     k_cnext_ = 0;

File cf/cf_gadget.mli

 (** {6 Modules } *)
 
 (** The module defining a red-black binary tree that use pins for the key. *)
-module Pin_map: Cf_rbtree.T with type Key.t = pin_t
+module Pin_map: Cf_map.T with type Key.t = pin_t
 
 (** The module defining a set of pins. *)
 module Pin_set: Cf_set.T with type Element.t = pin_t