/* Ċ Ġ* ĠCopyright ĠL WJ GL . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicense Ġterms : Ġhttps :// www . lwjgl . org / license Ċ Ġ*/ Ċ package Ġopen cl Ċ Ċ import Ġorg . lwjgl . generator .* Ċ import Ġjava . io .* Ċ Ċ private Ġval ĠNative Class . cap Name : ĠString ĊĠĠĠ Ġget () Ġ= Ġif Ġ( template Name . startsWith ( prefix )) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( prefix Ġ== Ġ" CL ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Open CL ${ template Name . substring ( 2 )}" ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Name ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ"${ prefix Template }_ $ template Name " ĊĠĠĠ Ġ} Ċ Ċ private Ġconst Ġval ĠCAP AB IL ITIES _ CLASS Ġ= Ġ" CL Capabilities " Ċ Ċ private Ġval ĠCL Binding Ġ= ĠGenerator . register ( object Ġ: ĠAPI Binding ( ĊĠĠĠ ĠModule . OPEN CL , ĊĠĠĠ ĠCAP AB IL ITIES _ CLASS , ĊĠĠĠ ĠAP IC ap abilities . JAVA _ CAP AB IL ITIES Ċ ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġprint Custom Javadoc ( writer : ĠPrintWriter , Ġfunction : ĠFunc , Ġdocumentation : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( function . native Class . template Name . startsWith (" CL ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . print Open CL Java Doc ( documentation , Ġfunction . native Name , Ġif Ġ( function . has < Deprecated CL >()) Ġfunction . get < Deprecated CL >(). after Ġelse Ġ" 2 . 1 ") Ġ// ĠTODO : Ġupdate Ġto Ġ 2 . 2 Ġwhen Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPrintWriter . print Open CL Java Doc ( documentation : ĠString , Ġfunction : ĠString , Ġversion : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġurl (" https :// www . kh ronos . org / registry / Open CL / sdk /$ version / docs / man / xhtml /$ function . html ", Ġ" Reference ĠPage ") ĊĠĠĠĠĠĠĠ Ġval Ġinjected Java Doc Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Ġ!= Ġ" 2 . 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ link Ġ- Ġ< em > This Ġfunction Ġis Ġdeprecated Ġafter ĠOpen CL Ġ$ version </ em >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink ĊĊĠĠĠĠĠĠĠ Ġif Ġ( documentation . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ t /** Ġ$ inject ed Java Doc Ġ*/ ") ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( documentation . indexOf ('\ n ') Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ t /** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("$ t Ġ* Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( documentation . substring ("$ t /** Ġ". length , Ġdocumentation . length Ġ- Ġ" Ġ*/ ". length )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( documentation . substring ( 0 , Ġdocumentation . length Ġ- Ġ"\ n $ t Ġ*/ ". length )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("\ n $ t Ġ* Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("\ n $ t Ġ* Ġ@ see Ġ$ inject ed Java Doc ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("\ n $ t Ġ*/ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Check Function Address ( function : ĠFunc ): ĠBoolean Ġ= Ġfunction . native Class . template Name Ġ!= Ġ" CL 1 0 " ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Function Address ( writer : ĠPrintWriter , Ġfunction : ĠFunc ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . println ("$ t ${ t } long Ġ$ FUNCTION _ ADDRESS Ġ= ĠCL . get ICD (). ${ function . name }; ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPrintWriter . check Extension Functions ( native Class : ĠNative Class ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcap Name Ġ= Ġnative Class . cap Name ĊĊĠĠĠĠĠĠĠ Ġprintln ("\ n ${ t } private Ġboolean Ġcheck _${ native Class . template Name }( Set < String > Ġext ) Ġ{ ") ĊĠĠĠĠĠĠĠ Ġprint ("$ t ${ t } return Ġext . contains (\" $ cap Name \") Ġ&& Ġcheck Extension (\" $ cap Name \", Ġcheck Functions (" ) ĊĠĠĠĠĠĠĠ Ġnative Class . print Pointers ( this , Ġ{ Ġit . name Ġ}) ĊĠĠĠĠĠĠĠ Ġprintln (" )); ") ĊĠĠĠĠĠĠĠ Ġprintln ("$ t }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġjava Import ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" static Ġorg . lwjgl . system . API Util .* ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" static Ġorg . lwjgl . system . Checks .* " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdocumentation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefines Ġthe Ġcapabilities Ġof Ġan ĠOpen CL Ġplatform Ġor Ġdevice . ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThe Ġinstance Ġreturned Ġby Ġ{@ link ĠCL \ # create Platform Capabilities } Ġexposes Ġthe Ġfunctionality Ġpresent Ġon Ġeither Ġthe Ġplatform Ġor Ġany Ġof Ġits Ġdevices . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThis Ġis Ġun like Ġthe Ġ# PLATFORM _ EXTENSION S Ġstring , Ġwhich Ġreturns Ġonly Ġplatform Ġfunctionality , Ġsupported Ġacross Ġall Ġplatform Ġdevices . ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThe Ġinstance Ġreturned Ġby Ġ{@ link ĠCL \ # create Device Capabilities } Ġexposes Ġonly Ġthe Ġfunctionality Ġavailable Ġon Ġthat Ġparticular Ġdevice . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠPrintWriter . generate Java () Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerate Java P reamble () ĊĠĠĠĠĠĠĠ Ġprintln (" public Ġclass Ġ$ CAP AB IL ITIES _ CLASS Ġ{\ n ") ĊĊĠĠĠĠĠĠĠ Ġval Ġclasses Ġ= Ġsuper . get Classes (" CL ") ĊĊĠĠĠĠĠĠĠ Ġval Ġaddresses Ġ= Ġclasses . get Function Pointers () ĊĊĠĠĠĠĠĠĠ Ġprintln ("${ t } public Ġfinal Ġlong ") ĊĠĠĠĠĠĠĠ Ġprintln ( addresses . map ( Func :: name ). join ToString (", \ n $ t $ t ", Ġprefix Ġ= Ġ"$ t $ t ", Ġpostfix Ġ= Ġ"; \ n ")) ĊĊĠĠĠĠĠĠĠ Ġclasses . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it . get Capability Javadoc ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ t } public Ġfinal Ġboolean Ġ${ it . cap Name }; ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠI CD / Platform Ġconstructor ĊĠĠĠĠĠĠĠ Ġprintln ("\ n $ t $ CAP AB IL ITIES _ CLASS ( Function Provider Ġprovider , ĠSet < String > Ġext ) Ġ{ ") ĊĠĠĠĠĠĠĠ Ġprintln ( addresses . join ToString (", \ n $ t $ t $ t ", Ġprefix Ġ= Ġ"$ t ${ t } this ( ext ,\ n $ t $ t $ t ", Ġpostfix Ġ= Ġ"\ n $ t $ t );\ n $ t }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" provider . get Function Address (${ it . function Address })" ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDevice Ġconstructor ĊĠĠĠĠĠĠĠ Ġprintln ("\ n $ t $ CAP AB IL ITIES _ CLASS ( CL Capabilities Ġcaps , ĠSet < String > Ġext ) Ġ{ ") ĊĠĠĠĠĠĠĠ Ġprintln ( addresses . join ToString (", \ n $ t $ t $ t ", Ġprefix Ġ= Ġ"$ t ${ t } this ( ext ,\ n $ t $ t $ t ", Ġpostfix Ġ= Ġ"\ n $ t $ t );\ n $ t }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" caps .${ it . name }" ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCommon Ġconstructor ĊĠĠĠĠĠĠĠ Ġprintln ("\ n ${ t } private Ġ$ CAP AB IL ITIES _ CLASS ( Set < String > Ġext , Ġlong ... Ġfunctions ) Ġ{ ") ĊĠĠĠĠĠĠĠ Ġprintln ( addresses . map Indexed Ġ{ Ġi , Ġfunction Ġ-> Ġ"${ function . name } Ġ= Ġfunctions [$ i ]; " Ġ}. join ToString ("\ n $ t $ t ", Ġprefix Ġ= Ġ"$ t $ t ")) ĊĠĠĠĠĠĠĠ Ġfor Ġ( extension Ġin Ġclasses ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcap Name Ġ= Ġextension . cap Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension . has Native Functions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n $ t $ t $ cap Name Ġ= Ġcheck _${ extension . template Name }( ext );" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n $ t $ t $ cap Name Ġ= Ġext . contains (\" $ cap Name \ "); " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprint (""" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġstatic Ġboolean Ġcheck Extension ( String Ġextension , Ġboolean Ġsupported ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( supported ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġapi Log ("[ CL ] Ġ" Ġ+ Ġextension Ġ+ Ġ" Ġwas Ġreported Ġas Ġavailable Ġbut Ġan Ġentry Ġpoint Ġis Ġmissing ."); ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ; ĊĠĠĠ Ġ} Ċ """) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( extension Ġin Ġclasses ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! extension . has Native Functions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Extension Functions ( extension ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln ("\ n }") ĊĠĠĠ Ġ} Ċ Ċ }) Ċ Ċ // ĠDSL ĠExtensions Ċ Ċ fun ĠString . native Class CL ( template Name : ĠString , Ġpostfix : ĠString Ġ= Ġ"", Ġinit : Ġ( Native Class . () Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ= ĊĠĠĠ Ġnative Class ( Module . OPEN CL , Ġtemplate Name , Ġprefix Ġ= Ġ" CL ", Ġpostfix Ġ= Ġpostfix , Ġprefix Template Ġ= Ġ" cl ", Ġbinding Ġ= ĠCL Binding , Ġinit Ġ= Ġinit ) Ċ Ċ val ĠNative Class . extension Link : ĠString ĊĠĠĠ Ġget () Ġ= Ġextension Link ( template Name ) Ċ Ċ fun ĠNative Class . extension Link ( ĊĠĠĠ Ġtxt : ĠString , ĊĠĠĠ Ġprefix : ĠString Ġ= Ġtxt . substring ( 0 , Ġtxt . indexOf ('_ ')), ĊĠĠĠ Ġname : ĠString Ġ= Ġtemplate Name Ċ ) Ġ= Ġurl (" http :// www . kh ronos . org / registry / Open CL / extensions /$ prefix / cl _$ txt . txt ", Ġname ) Ċ Ċ val ĠNative Class . extension Name : ĠString ĊĠĠĠ Ġget () Ġ= Ġ"< strong >$ template Name </ strong >"