123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148(**************************************************************************)(* *)(* OCaml *)(* *)(* Stephen Dolan, University of Cambridge *)(* *)(* Copyright 2017-2018 University of Cambridge. *)(* *)(* All rights reserved. This file is distributed under the terms of *)(* the GNU Lesser General Public License version 2.1, with the *)(* special exception on linking described in the file LICENSE. *)(* *)(**************************************************************************)type(!'a:value_or_null)t:sync_datawith'a={mutablecontents:'a[@atomic]}externalmake:('a:value_or_null).'a->('at[@local_opt])@@portable="%makemutable"externalmake_contended:('a:value_or_null).'a->('at[@local_opt])@@portable="caml_atomic_make_contended"externalget:('a:value_or_null).'at@local->'a@@portable="%atomic_load"externalset:('a:value_or_null).'at@local->'a->unit@@portable="%atomic_set"externalexchange:('a:value_or_null).'at@local->'a->'a@@portable="%atomic_exchange"externalcompare_and_set:('a:value_or_null).'at@local->'a->'a->bool@@portable="%atomic_cas"externalcompare_exchange:('a:value_or_null).'at@local->'a->'a->'a@@portable="%atomic_compare_exchange"externalfetch_and_add:intt@local->int->int@@portable="%atomic_fetch_add"externaladd:intt@local->int->unit@@portable="%atomic_add"externalsub:intt@local->int->unit@@portable="%atomic_sub"externallogand:intt@local->int->unit@@portable="%atomic_land"externallogor:intt@local->int->unit@@portable="%atomic_lor"externallogxor:intt@local->int->unit@@portable="%atomic_lxor"letincrr=addr1letdecrr=subr1externalget_contended:('a:value_or_null).'at@contendedlocal->'a@contended@@portable="%atomic_load"moduleLoc=structtype('a:value_or_null)t:sync_datawith'a='aatomic_locexternalget:('a:value_or_null).'at@local->'a@@portable="%atomic_load_loc"externalset:('a:value_or_null).'at@local->'a->unit@@portable="%atomic_set_loc"externalexchange:('a:value_or_null).'at@local->'a->'a@@portable="%atomic_exchange_loc"externalcompare_and_set:('a:value_or_null).'at@local->'a->'a->bool@@portable="%atomic_cas_loc"externalcompare_exchange:('a:value_or_null).'at@local->'a->'a->'a@@portable="%atomic_compare_exchange_loc"externalfetch_and_add:intt@local->int->int@@portable="%atomic_fetch_add_loc"externaladd:intt@local->int->unit@@portable="%atomic_add_loc"externalsub:intt@local->int->unit@@portable="%atomic_sub_loc"externallogand:intt@local->int->unit@@portable="%atomic_land_loc"externallogor:intt@local->int->unit@@portable="%atomic_lor_loc"externallogxor:intt@local->int->unit@@portable="%atomic_lxor_loc"letincrt=addt1letdecrt=subt1externalget_contended:('a:value_or_null).'at@contendedlocal->'a@contended@@portable="%atomic_load_loc"end