
  * growvect.mli 
  * 
  * This file is part of the Oxford Oberon-2 compiler 
  * Copyright ( c ) 2006    
  * All rights reserved 
  * 
  * Redistribution and use in source and binary forms , with or without 
  * modification , are permitted provided that the following conditions are met : 
  * 
  * 1 . Redistributions of source code must retain the above copyright notice , 
  *     this list of conditions and the following disclaimer . 
  * 2 . 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 . 
  * 3 . The name of the author may not be used to endorse or promote products 
  *     derived from this software without specific prior written permission . 
  * 
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ` ` 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 AUTHOR 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 , 
  *  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 . 
  * 
  * $ I d : growvect.mli 1345 2009 - 04 - 20 22:41:04Z mike $ 
 
 * growvect.mli
 * 
 * This file is part of the Oxford Oberon-2 compiler
 * Copyright (c) 2006 J. M. Spivey
 * All rights reserved
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. 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.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
 *
 * $Id: growvect.mli 1345 2009-04-20 22:41:04Z mike $
 *)

(* This module provides an alternative implementation of arrays that
grow as needed to accommodate the indices used in assignments. *)

type 'a t

(* create -- make an empty vector with a specified initial capacity *)
val create : int -> 'a t

(* clear -- make vector empty again *)
val clear : 'a t -> unit

(* get -- fetch element at given index *)
val get : 'a t -> int -> 'a

(* size -- get current number of elements *)
val size : 'a t -> int

(* set -- change element at given index *)  
val set : 'a t -> int -> 'a -> unit

(* append -- add new element at the end *)
val append : 'a t -> 'a -> unit

val to_list : 'a t -> 'a list

 This module provides an alternative implementation of arrays that
grow as needed to accommodate the indices used in assignments. 
 create -- make an empty vector with a specified initial capacity 
 clear -- make vector empty again 
 get -- fetch element at given index 
 size -- get current number of elements 
 set -- change element at given index 
 append -- add new element at the end 

  * growvect.mli 
  * 
  * This file is part of the Oxford Oberon-2 compiler 
  * Copyright ( c ) 2006    
  * All rights reserved 
  * 
  * Redistribution and use in source and binary forms , with or without 
  * modification , are permitted provided that the following conditions are met : 
  * 
  * 1 . Redistributions of source code must retain the above copyright notice , 
  *     this list of conditions and the following disclaimer . 
  * 2 . 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 . 
  * 3 . The name of the author may not be used to endorse or promote products 
  *     derived from this software without specific prior written permission . 
  * 
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ` ` 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 AUTHOR 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 , 
  *  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 . 
  * 
  * $ I d : growvect.mli 1345 2009 - 04 - 20 22:41:04Z mike $ 
 
 * growvect.mli
 * 
 * This file is part of the Oxford Oberon-2 compiler
 * Copyright (c) 2006 J. M. Spivey
 * All rights reserved
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. 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.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
 *
 * $Id: growvect.mli 1345 2009-04-20 22:41:04Z mike $
 *)


type 'a t

val create : int -> 'a t

val clear : 'a t -> unit

val get : 'a t -> int -> 'a

val size : 'a t -> int

val set : 'a t -> int -> 'a -> unit

val append : 'a t -> 'a -> unit

val to_list : 'a t -> 'a list
