/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġcodegen . fun Interface . kt 4 3 8 8 7 Ċ Ċ import Ġkotlin . test .* Ċ Ċ import Ġkotlinx . c interop .* Ċ type alias Ġheap _ t Ġ= ĠInt Var Ċ fun Ġheap _ create ( size : ĠLong ): ĠC Pointer < heap _ t >? Ġ= Ġnull Ċ fun Ġheap _ alloc ( heap : ĠC Pointer < heap _ t > ?, Ġsize : ĠU Long ): ĠC Pointer < *> ? Ġ= Ġnull Ċ fun Ġheap _ free ( heap : ĠC Pointer < heap _ t > ?, Ġptr : ĠC Pointer < *> ?): ĠC Pointer < Boolean Var >? Ġ= Ġnull Ċ inline Ġfun ĠHeap ( size : ĠLong ): ĠC Pointer < heap _ t >? Ġ{ ĊĠĠĠ Ġreturn Ġheap _ create ( size ) Ċ } Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠC Variable > ĠC Pointer < heap _ t > ?. use ( f : Ġ( CP o inter < T >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġalloc < T >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . also ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . also (:: free ) Ċ } Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠC Variable > ĠC Pointer < heap _ t > ?. alloc (): ĠC Pointer < T >? Ġ{ ĊĠĠĠ Ġreturn Ġheap _ alloc ( this , Ġsize Of < T >(). to UL ong ()) ?. reinterpret () Ċ } Ċ inline Ġfun ĠC Pointer < heap _ t > ?. free ( ptr : ĠC Pointer < *> ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġheap _ free ( this , Ġptr )?. point ed ?. value Ġ?: Ġfalse Ċ } Ċ Ċ @ Test Ċ fun Ġrun Test (): ĠUnit Ġ= Ġmem Scoped Ġ{ ĊĠĠĠ Ġval Ġheap Ġ= ĠHeap ( 1 0 2 4 ) ĊĊĠĠĠ Ġheap . use < Int Var > Ġ{ Ġptr Ġ-> ĊĠĠĠĠĠĠĠ Ġptr . point ed . value Ġ= Ġ 4 0 ĊĠĠĠĠĠĠĠ Ġ// println (" PTR Ġ${ ptr . point ed }") ĊĠĠĠ Ġ} Ċ } Ċ