1234567891011121314151617181920212223242526272829303132333435363738394041424344454647(******************************************************************************)(* *)(* Inferno *)(* *)(* François Pottier, Inria Paris *)(* *)(* Copyright Inria. All rights reserved. This file is distributed under the *)(* terms of the MIT License, as described in the file LICENSE. *)(* *)(******************************************************************************)(** This module implements infinite arrays, that is, arrays that grow
transparently upon demand. *)type'at={default:'a;mutabletable:'aarray;}letmakedefault_sizex={default=x;table=Array.makedefault_sizex;}letrecnew_lengthlengthi=ifi<lengththenlengthelsenew_length(2*length)iletensureai=lettable=a.tableinletlength=Array.lengthtableinifi>=lengththenbeginlettable'=Array.make(new_length(2*length)i)a.defaultinArray.blittable0table'0length;a.table<-table'endletgetai=ensureai;a.table.(i)letsetaix=ensureai;a.table.(i)<-x