From d6d149e549c5a5555f5c706e90445d726e804917 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 4 Mar 2013 13:25:25 +0100 Subject: [PATCH] moved everything to the root directory --- Makefile | 6 +-- src/cache.ml => cache.ml | 25 ++++++++++++ cache.mli | 52 ++++++++++++++++++++++++ src/containers.mllib => containers.mllib | 0 src/deque.ml => deque.ml | 25 ++++++++++++ deque.mli | 44 ++++++++++++++++++++ src/flatHashtbl.ml => flatHashtbl.ml | 25 ++++++++++++ src/flatHashtbl.mli => flatHashtbl.mli | 25 ++++++++++++ src/graph.ml => graph.ml | 25 ++++++++++++ src/graph.mli => graph.mli | 25 ++++++++++++ src/leftistheap.ml => leftistheap.ml | 0 src/leftistheap.mli => leftistheap.mli | 0 src/cache.mli | 27 ------------ src/deque.mli | 19 --------- src/vector.ml => vector.ml | 25 ++++++++++++ src/vector.mli => vector.mli | 25 ++++++++++++ 16 files changed, 299 insertions(+), 49 deletions(-) rename src/cache.ml => cache.ml (56%) create mode 100644 cache.mli rename src/containers.mllib => containers.mllib (100%) rename src/deque.ml => deque.ml (51%) create mode 100644 deque.mli rename src/flatHashtbl.ml => flatHashtbl.ml (83%) rename src/flatHashtbl.mli => flatHashtbl.mli (53%) rename src/graph.ml => graph.ml (91%) rename src/graph.mli => graph.mli (77%) rename src/leftistheap.ml => leftistheap.ml (100%) rename src/leftistheap.mli => leftistheap.mli (100%) delete mode 100644 src/cache.mli delete mode 100644 src/deque.mli rename src/vector.ml => vector.ml (76%) rename src/vector.mli => vector.mli (62%) diff --git a/Makefile b/Makefile index 1df3ca28..47466619 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ -INTERFACE_FILES = $(shell find src -name '*.mli') -IMPLEMENTATION_FILES = $(shell find src -name '*.ml') +INTERFACE_FILES = $(shell find -name '*.mli') +IMPLEMENTATION_FILES = $(shell find -name '*.ml') -TARGETS_LIB = src/containers.cmxa src/containers.cma +TARGETS_LIB = containers.cmxa containers.cma OPTIONS = -use-ocamlfind -lib sequence all: diff --git a/src/cache.ml b/cache.ml similarity index 56% rename from src/cache.ml rename to cache.ml index 46b2b723..3e3464eb 100644 --- a/src/cache.ml +++ b/cache.ml @@ -1,3 +1,28 @@ +(* +Copyright (c) 2013, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + (** an imperative cache for memoization of pairs *) module type S = diff --git a/cache.mli b/cache.mli new file mode 100644 index 00000000..12684870 --- /dev/null +++ b/cache.mli @@ -0,0 +1,52 @@ +(* +Copyright (c) 2013, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + +(** An imperative cache of fixed size for memoization of pairs *) + +module type S = + sig + type key + + type 'a t + + (** create a cache with given size *) + val create : int -> (key -> key -> 'a) -> 'a t + + (** find a value in the cache *) + val lookup : 'a t -> key -> key -> 'a + + (** clear the cache from its content *) + val clear : 'a t -> unit + end + +module type CachedType = + sig + type t + val hash : t -> int + val equal : t -> t -> bool + end + +(** functorial implementation *) +module Make(CType : CachedType) : S with type key = CType.t diff --git a/src/containers.mllib b/containers.mllib similarity index 100% rename from src/containers.mllib rename to containers.mllib diff --git a/src/deque.ml b/deque.ml similarity index 51% rename from src/deque.ml rename to deque.ml index 37631795..4cc9e0c2 100644 --- a/src/deque.ml +++ b/deque.ml @@ -1,3 +1,28 @@ +(* +Copyright (c) 2013, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + (** Imperative deque *) type 'a elt = { diff --git a/deque.mli b/deque.mli new file mode 100644 index 00000000..4628b183 --- /dev/null +++ b/deque.mli @@ -0,0 +1,44 @@ +(* +Copyright (c) 2013, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + +(** Imperative deque *) + +type 'a t + +exception Empty + +val create : unit -> 'a t + +val is_empty : 'a t -> bool + +val length : 'a t -> int + +val push_front : 'a t -> 'a -> unit + +val push_back : 'a t -> 'a -> unit + +val take_back : 'a t -> 'a + +val take_front : 'a t -> 'a diff --git a/src/flatHashtbl.ml b/flatHashtbl.ml similarity index 83% rename from src/flatHashtbl.ml rename to flatHashtbl.ml index 4783b71e..2fa9b286 100644 --- a/src/flatHashtbl.ml +++ b/flatHashtbl.ml @@ -1,3 +1,28 @@ +(* +Copyright (c) 2013, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + (** Open addressing hashtable, with linear probing. *) module type S = diff --git a/src/flatHashtbl.mli b/flatHashtbl.mli similarity index 53% rename from src/flatHashtbl.mli rename to flatHashtbl.mli index 218020d1..413ace2d 100644 --- a/src/flatHashtbl.mli +++ b/flatHashtbl.mli @@ -1,3 +1,28 @@ +(* +Copyright (c) 2013, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + (** Open addressing hashtable, with linear probing. *) module type S = diff --git a/src/graph.ml b/graph.ml similarity index 91% rename from src/graph.ml rename to graph.ml index 0f274e98..5fd780e0 100644 --- a/src/graph.ml +++ b/graph.ml @@ -1,3 +1,28 @@ +(* +Copyright (c) 2013, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + (** {1 A simple persistent directed graph.} *) module type S = sig diff --git a/src/graph.mli b/graph.mli similarity index 77% rename from src/graph.mli rename to graph.mli index 739cc240..34e3b9af 100644 --- a/src/graph.mli +++ b/graph.mli @@ -1,3 +1,28 @@ +(* +Copyright (c) 2013, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + (** {1 A simple persistent directed graph.} *) module type S = sig diff --git a/src/leftistheap.ml b/leftistheap.ml similarity index 100% rename from src/leftistheap.ml rename to leftistheap.ml diff --git a/src/leftistheap.mli b/leftistheap.mli similarity index 100% rename from src/leftistheap.mli rename to leftistheap.mli diff --git a/src/cache.mli b/src/cache.mli deleted file mode 100644 index 188ffe2f..00000000 --- a/src/cache.mli +++ /dev/null @@ -1,27 +0,0 @@ -(** An imperative cache of fixed size for memoization of pairs *) - -module type S = - sig - type key - - type 'a t - - (** create a cache with given size *) - val create : int -> (key -> key -> 'a) -> 'a t - - (** find a value in the cache *) - val lookup : 'a t -> key -> key -> 'a - - (** clear the cache from its content *) - val clear : 'a t -> unit - end - -module type CachedType = - sig - type t - val hash : t -> int - val equal : t -> t -> bool - end - -(** functorial implementation *) -module Make(CType : CachedType) : S with type key = CType.t diff --git a/src/deque.mli b/src/deque.mli deleted file mode 100644 index 53459eb5..00000000 --- a/src/deque.mli +++ /dev/null @@ -1,19 +0,0 @@ -(** Imperative deque *) - -type 'a t - -exception Empty - -val create : unit -> 'a t - -val is_empty : 'a t -> bool - -val length : 'a t -> int - -val push_front : 'a t -> 'a -> unit - -val push_back : 'a t -> 'a -> unit - -val take_back : 'a t -> 'a - -val take_front : 'a t -> 'a diff --git a/src/vector.ml b/vector.ml similarity index 76% rename from src/vector.ml rename to vector.ml index eb5fdcb2..4c60f853 100644 --- a/src/vector.ml +++ b/vector.ml @@ -1,3 +1,28 @@ +(* +Copyright (c) 2013, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + (** Growable, mutable vector *) (** a vector of 'a. *) diff --git a/src/vector.mli b/vector.mli similarity index 62% rename from src/vector.mli rename to vector.mli index 111dacaf..50b13cc4 100644 --- a/src/vector.mli +++ b/vector.mli @@ -1,3 +1,28 @@ +(* +Copyright (c) 2013, Simon Cruanes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + (** Growable, mutable vector *) type 'a t