123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128(*
* Copyright (c) 2013 Jeremy Yallop.
*
* This file is distributed under the terms of the MIT License.
* See the file LICENSE for details.
*)moduletypeAbstract=sigtypetvalt:tCtypes.typendletmkAbstract:'a.'aCtypes.typ->(moduleAbstract)=fun(typea)(ty:aCtypes.typ)->(modulestructtypet=alett=tyend:Abstract)letmkAbstractSized:name:string->size:int->alignment:int->(moduleAbstract)=fun~name~size~alignment:a->(modulestructopenCtypestypet=unitCtypes.abstractlett=abstract~name~size~alignment:aend:Abstract)letmkArithmetic_abstract=letopenCtypesinfunctionCtypes_static.Int8->mkAbstractint8_t|Ctypes_static.Int16->mkAbstractint16_t|Ctypes_static.Int32->mkAbstractint32_t|Ctypes_static.Int64->mkAbstractint64_t|Ctypes_static.Uint8->mkAbstractuint8_t|Ctypes_static.Uint16->mkAbstractuint16_t|Ctypes_static.Uint32->mkAbstractuint32_t|Ctypes_static.Uint64->mkAbstractuint64_t|Ctypes_static.Float->mkAbstractfloat|Ctypes_static.Double->mkAbstractdoubleletmkSignedname=function|Ctypes_static.Int8->Ctypes_std_views.signed_typedefname~size:1|Ctypes_static.Int16->Ctypes_std_views.signed_typedefname~size:2|Ctypes_static.Int32->Ctypes_std_views.signed_typedefname~size:4|Ctypes_static.Int64->Ctypes_std_views.signed_typedefname~size:8|_->assertfalseletmkUnsignedname=function|Ctypes_static.Uint8->Ctypes_std_views.unsigned_typedefname~size:1|Ctypes_static.Uint16->Ctypes_std_views.unsigned_typedefname~size:2|Ctypes_static.Uint32->Ctypes_std_views.unsigned_typedefname~size:4|Ctypes_static.Uint64->Ctypes_std_views.unsigned_typedefname~size:8|_->assertfalseletmkArithmeticname:_->(moduleCtypes_std_views.Unsigned_type)=letopenCtypes_staticinfunction|Uint8|Uint16|Uint32|Uint64asu->letmoduleU=(valmkUnsignednameu)in(moduleU)|Int8|Int16|Int32|Int64asu->letmoduleS=(valmkSignednameu)in(moduleS)|_->assertfalse(* Arithmetic types *)externaltypeof_clock_t:unit->Ctypes_static.arithmetic="ctypes_typeof_clock_t"externaltypeof_dev_t:unit->Ctypes_static.arithmetic="ctypes_typeof_dev_t"externaltypeof_ino_t:unit->Ctypes_static.arithmetic="ctypes_typeof_ino_t"externaltypeof_mode_t:unit->Ctypes_static.arithmetic="ctypes_typeof_mode_t"externaltypeof_nlink_t:unit->Ctypes_static.arithmetic="ctypes_typeof_nlink_t"externaltypeof_off_t:unit->Ctypes_static.arithmetic="ctypes_typeof_off_t"externaltypeof_pid_t:unit->Ctypes_static.arithmetic="ctypes_typeof_pid_t"externaltypeof_ssize_t:unit->Ctypes_static.arithmetic="ctypes_typeof_ssize_t"externaltypeof_time_t:unit->Ctypes_static.arithmetic="ctypes_typeof_time_t"externaltypeof_useconds_t:unit->Ctypes_static.arithmetic="ctypes_typeof_useconds_t"moduleClock=(valmkArithmetic_abstract(typeof_clock_t()):Abstract)moduleDev=(valmkArithmetic"dev_t"(typeof_dev_t()))moduleIno=(valmkArithmetic"ino_t"(typeof_ino_t()))moduleMode=(valmkArithmetic"mode_t"(typeof_mode_t()))moduleNlink=(valmkArithmetic"nlink_t"(typeof_nlink_t()))moduleOff=(valmkSigned"off_t"(typeof_off_t()))modulePid=(valmkSigned"pid_t"(typeof_pid_t()))moduleSize=structtypet=Unsigned.size_tlett=Ctypes.size_tendmoduleSsize=(valmkSigned"ssize_t"(typeof_ssize_t()))moduleTime=(valmkArithmetic"time_t"(typeof_time_t()))moduleUseconds=(valmkArithmetic_abstract(typeof_useconds_t()):Abstract)typeclock_t=Clock.ttypedev_t=Dev.ttypeino_t=Ino.ttypemode_t=Mode.ttypenlink_t=Nlink.ttypeoff_t=Off.ttypepid_t=Pid.ttypesize_t=Size.ttypessize_t=Ssize.ttypetime_t=Time.ttypeuseconds_t=Useconds.tletclock_t=Clock.tletdev_t=Dev.tletino_t=Ino.tletmode_t=Mode.tletnlink_t=Nlink.tletoff_t=Off.tletpid_t=Pid.tletsize_t=Size.tletssize_t=Ssize.tlettime_t=Time.tletuseconds_t=Useconds.t(* Non-arithmetic types *)externalsizeof_sigset_t:unit->int="ctypes_sizeof_sigset_t"externalalignmentof_sigset_t:unit->int="ctypes_alignmentof_sigset_t"moduleSigset=(valmkAbstractSized~name:"sigset_t"~size:(sizeof_sigset_t())~alignment:(alignmentof_sigset_t()):Abstract)typesigset_t=Sigset.tletsigset_t=Sigset.t