/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . room . solver Ċ Ċ import Ġandroidx . room . compiler . processing . X Type Ċ import Ġandroidx . room . processor . Context Ċ import Ġandroidx . room . solver . types . Composite Type Converter Ċ import Ġandroidx . room . solver . types . No Op Converter Ċ import Ġandroidx . room . solver . types . Require NotNull Type Converter Ċ import Ġandroidx . room . solver . types . Type Converter Ċ import Ġandroidx . room . solver . types . Up Cast Type Converter Ċ Ċ interface ĠType Converter Store Ġ{ ĊĠĠĠ Ġval Ġtype Converters : ĠList < Type Converter > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġa Ġ[ Type Converter ] Ġ( m ight Ġbe Ġcomposite ) Ġthat Ġcan Ġconvert Ġthe Ġgiven Ġ[ input ] Ġtype Ġinto ĊĠĠĠĠ Ġ* Ġone Ġof Ġthe Ġgiven Ġ[ column Types ]. ĠIf Ġ[ column Types ] Ġis Ġnot Ġspecified , Ġtargets Ġall ĊĠĠĠĠ Ġ* Ġ` known Column Types `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Converter Into Statement ( ĊĠĠĠĠĠĠĠ Ġinput : ĠX Type , ĊĠĠĠĠĠĠĠ Ġcolumn Types : ĠList < X Type >? ĊĠĠĠ Ġ): ĠType Converter ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġa Ġ[ Type Converter ] Ġ( m ight Ġbe Ġcomposite ) Ġthat Ġcan Ġconvert Ġthe Ġgiven Ġ[ column Types ] Ġinto ĊĠĠĠĠ Ġ* Ġthe Ġ[ output ] Ġtype . ĠIf Ġ[ column Types ] Ġis Ġnot Ġspecified , Ġuses Ġall Ġ` known Column Types `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Converter From Cursor ( ĊĠĠĠĠĠĠĠ Ġcolumn Types : ĠList < X Type > ?, ĊĠĠĠĠĠĠĠ Ġoutput : ĠX Type ĊĠĠĠ Ġ): ĠType Converter ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġa Ġ[ Type Converter ] Ġfrom Ġ[ input ] Ġto Ġ[ output ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Type Converter ( ĊĠĠĠĠĠĠĠ Ġinput : ĠX Type , ĊĠĠĠĠĠĠĠ Ġoutput : ĠX Type ĊĠĠĠ Ġ): ĠType Converter ? ĊĊĠĠĠ Ġfun Ġreverse ( converter : ĠType Converter ): ĠType Converter ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( converter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNo Op Converter Ġ-> Ġconverter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠComposite Type Converter Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr 1 Ġ= Ġreverse ( converter . conv 1 ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr 2 Ġ= Ġreverse ( converter . conv 2 ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Type Converter ( r 2 , Ġr 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreverse Ġof Ġrequire Ġnot Ġnull Ġis Ġup cast Ġsince Ġnot Ġnull Ġcan Ġbe Ġconverted Ġinto Ġnullable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRequire NotNull Type Converter Ġ-> ĠUp Cast Type Converter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Cast From Ġ= Ġconverter . to , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Cast To Ġ= Ġconverter . from ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converters . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . from . is Same Type ( converter . to ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . to . is Same Type ( converter . from ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠProcessing Ġcontext ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtype Converters ĠAvailable ĠType Converters , Ġordered Ġby Ġpriority Ġwhen Ġthey Ġhave Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ Ġsame Ġcost . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġknown Column Types ĠList Ġof Ġtypes Ġthat Ġcan Ġbe Ġsaved Ġinto Ġdb / read Ġfrom Ġwithout Ġa ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ Ġconverter . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converters : ĠList < Type Converter >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġknown Column Types : ĠList < X Type > ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġif Ġ( context . use Null Aware Converter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNull Aware Type Converter Store ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converters Ġ= Ġtype Converters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġknown Column Types Ġ= Ġknown Column Types ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType Converter Store Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converters Ġ= Ġtype Converters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġknown Column Types Ġ= Ġknown Column Types ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }