It's not for EXTREME speed; just for convenience…
ANY suggestion/critic Welcome!
Code: Select all
Procedure.d priifn(e,t.d,f.d) ; "temporary Double" for non-String types
If e : ProcedureReturn t : EndIf : ProcedureReturn f
EndProcedure
Procedure.s priifs(e,s.s,d.s)
ProcedureReturn StringField(s,Bool(Not(e))+1,d)
EndProcedure
Macro IIFn(e,t,f) ; IIFn(true?, trueNumber, falseNumber)
priifn(Bool(e),t,f)
EndMacro
#iifsdelim="|"
Macro IIFs(e,s,delim=#iifsdelim) ; IIFs(true?, "trueString|falseString")
priifs(Bool(e),s,delim) ; delimiter can be multi-characters
EndMacro
Macro IIF(e,t,f) ; IIF(a=b?, x=1, s="y")
If Bool(e) : t : Else : f : EndIf ; Bool just in case
EndMacro
CompilerIf #PB_Compiler_Debugger
Macro dq : "
EndMacro
Macro diifexpr(e,s,i="is") ; "non-blocking assert" (no CallDebugger)
Debug ~"File: \""+#PB_Compiler_Filename+
~"\"\nLine "+ #PB_Compiler_Line + ~": \""+ dq#e#dq +~"\" "+i+" "+ IIFs(e,s)
EndMacro
Macro BadAssert(e,t="") ; blocking if true
If e
Debug ~"File: \""+#PB_Compiler_Filename+
~"\"\nLine "+ #PB_Compiler_Line + ~": \""+ dq#e#dq +~"\" is true! "+t
CallDebugger
EndIf
EndMacro
CompilerElse
Macro diifexpr(e,s,i=""):EndMacro
Macro BadAssert(e,t=""):EndMacro
CompilerEndIf
BadAssert(x<>0,x) ; x should be 0 (and is also integer) by default
Debug ~"--- IIFs ---\n"
x=10 : Debug "x = "+x
Debug ""+x+" Point"+ IIFs(Not(x=1), "s") ; also IIFs(x<>1,"s")
Debug ""+x+" is "+ IIFs(x&1, "Odd|Even")
diifexpr(1&#False Or x/(x-8)=5, "true|not true!")
Debug ""
x=1 : Debug "x = "+x
Debug ""+x+" Point"+ IIFs(x=1, "|s") ; empty StringField
Debug ~"\n--- IIFn ---\n"
Debug IIFn(1=0, 11, 10) ; it's Double, but…
Debug ""+IIFn(1=0, 11, 10) ; becomes Integer on a "string"
x = IIFn(1=0, %1011, $F-4-x) ; becomes type of x (Integer in this case)
Debug x