Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file id_table.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116openCoreopenCore_profilertype('a,+'rw)t='aoptionarrayletids_rangeids=letids=List.mapids~f:Probe_id.to_int_exninList.iterids~f:(funid->assert(id>=0));matchList.max_eltids~compare:Int.comparewith|None->0|Somex->x+1letcreateidsempty=letlen=ids_rangeidsinlett=Array.create~lenNoneinList.iterids~f:(funid->t.(Probe_id.to_int_exnid)<-Someempty);tletcreate'other_tempty=Array.mapother_t~f:(function|None->None|Some_x->Someempty)letinitids~f=letlen=ids_rangeidsinlett=Array.create~lenNoneinList.iterids~f:(funid->t.(Probe_id.to_int_exnid)<-Some(fid));tletinit_from_mapid_map~f=letlen=matchMap.min_eltid_map,Map.max_eltid_mapwith|(None,_)|(_,None)->0|(Some(min_elt,_),(Some(max_elt,_)))->letmin_elt=Probe_id.to_int_exnmin_eltinletmax_elt=Probe_id.to_int_exnmax_eltinassert(min_elt>=0);max_elt+1inlett=Array.create~lenNoneinMap.iteriid_map~f:(fun~key:id~data:metadata->t.(Probe_id.to_int_exnid)<-Some(fidmetadata));tletfindtid=letid'=Probe_id.to_int_exnidinifid'<0||id'>=Array.lengthtthenNoneelseArray.unsafe_gettid'letfind_exntid=matchfindtidwith|None->failwithf!"Id %{Probe_id} not found amongst"id()|Somedata->dataletset_exn(typea)(t:(a,'rw)t)iddata=(* Check that the cell is filled / the Id is legit first: *)ignore(find_exntid:a);t.(Probe_id.to_int_exnid)<-Somedataletitert~f=Array.iterit~f:(funiddata->matchdatawith|Somedata->f(Probe_id.of_int_exnid)data|None->())letfoldt~init~f=Array.foldit~init~f:(funidaccumdata->matchdatawith|Somedata->faccum(Probe_id.of_int_exnid)data|None->accum)letfold_rightt~init~f=letrecloopiaccum=letaccum=matcht.(i)with|Somedata->faccum(Probe_id.of_int_exni)data|None->accuminifi<=0thenaccumelseloop(i-1)accuminloop(Array.lengtht-1)initletto_alistt=fold_rightt~init:[]~f:(funaccumiditem->(id,item)::accum)letmapt~f=let(>>|)=Option.(>>|)inArray.mapit~f:(funid'data->letid=Probe_id.of_int_exnid'indata>>|fid)letfilter_mapt~f=let(>>=)=Option.(>>=)inArray.mapit~f:(funid'data->letid=Probe_id.of_int_exnid'indata>>=fid)letread_onlyt=t