Practical: Inspects various properties of an item from within a callback, including its definition text.

ID: 674

				
					using uCalcSoftware;

var uc = new uCalc();

static void ItemCallback(uCalc.Callback cb) {
   var itm = cb.Item;
   Console.WriteLine($"Name: {itm.Name}");
   Console.WriteLine($"Data type: {itm.DataType.Name}");
   Console.WriteLine($"Param count: {(itm.Count).ToString()}");
   Console.Write("Procedure type: ");
   if (itm.IsProperty(ItemIs.Operator)) {
      Console.WriteLine("Operator");
   } else if (itm.IsProperty(ItemIs.Function)) {
      Console.WriteLine("Function");
   }
   Console.WriteLine($"Definition: {itm.Text}");
   Console.WriteLine($"Description: {itm.Description}");
   Console.WriteLine("---");
}

uc.DefineFunction("AAA() As Double", ItemCallback).Description = "Does this and that";
uc.DefineFunction("BBB(x, y, z) As String", ItemCallback).Description = "Does something else";
uc.DefineOperator("{x} CCC {y} As Int32", 55, Associativity.LeftToRight, ItemCallback);

uc.EvalStr("AAA()");
uc.EvalStr("BBB(9, 8, 7)");
uc.EvalStr("5 CCC 4");
				
			
Name: aaa
Data type: double
Param count: 0
Procedure type: Function
Definition: Function: AAA() As Double
Description: Does this and that
---
Name: bbb
Data type: string
Param count: 3
Procedure type: Function
Definition: Function: BBB(x, y, z) As String
Description: Does something else
---
Name: ccc
Data type: int
Param count: 2
Procedure type: Operator
Definition: Operator: {x} CCC {y} As Int32
Description: 
---
				
					#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

void ucalc_call ItemCallback(uCalcBase::Callback cb) {
   auto itm = cb.Item();
   cout << "Name: " << itm.Name() << endl;
   cout << "Data type: " << itm.DataType().Name() << endl;
   cout << "Param count: " << to_string(itm.Count()) << endl;
   cout << "Procedure type: ";
   if (itm.IsProperty(ItemIs::Operator)) {
      cout << "Operator" << endl;
   } else if (itm.IsProperty(ItemIs::Function)) {
      cout << "Function" << endl;
   }
   cout << "Definition: " << itm.Text() << endl;
   cout << "Description: " << itm.Description() << endl;
   cout << "---" << endl;
}
int main() {
   uCalc uc;
   uc.DefineFunction("AAA() As Double", ItemCallback).Description("Does this and that");
   uc.DefineFunction("BBB(x, y, z) As String", ItemCallback).Description("Does something else");
   uc.DefineOperator("{x} CCC {y} As Int32", 55, Associativity::LeftToRight, ItemCallback);

   uc.EvalStr("AAA()");
   uc.EvalStr("BBB(9, 8, 7)");
   uc.EvalStr("5 CCC 4");
}
				
			
Name: aaa
Data type: double
Param count: 0
Procedure type: Function
Definition: Function: AAA() As Double
Description: Does this and that
---
Name: bbb
Data type: string
Param count: 3
Procedure type: Function
Definition: Function: BBB(x, y, z) As String
Description: Does something else
---
Name: ccc
Data type: int
Param count: 2
Procedure type: Operator
Definition: Operator: {x} CCC {y} As Int32
Description: 
---
				
					Imports System
Imports uCalcSoftware
Public Module Program
   
   Public Sub ItemCallback(ByVal cb As uCalc.Callback)
      Dim itm = cb.Item
      Console.WriteLine($"Name: {itm.Name}")
      Console.WriteLine($"Data type: {itm.DataType.Name}")
      Console.WriteLine($"Param count: {(itm.Count).ToString()}")
      Console.Write("Procedure type: ")
      If itm.IsProperty(ItemIs.Operator) Then
         Console.WriteLine("Operator")
         ElseIf itm.IsProperty(ItemIs.Function ) Then
            Console.WriteLine("Function")
         End If
         Console.WriteLine($"Definition: {itm.Text}")
         Console.WriteLine($"Description: {itm.Description}")
         Console.WriteLine("---")
      End Sub
      Public Sub Main()
         Dim uc As New uCalc()
         uc.DefineFunction("AAA() As Double", AddressOf ItemCallback).Description = "Does this and that"
         uc.DefineFunction("BBB(x, y, z) As String", AddressOf ItemCallback).Description = "Does something else"
         uc.DefineOperator("{x} CCC {y} As Int32", 55, Associativity.LeftToRight, AddressOf ItemCallback)
         
         uc.EvalStr("AAA()")
         uc.EvalStr("BBB(9, 8, 7)")
         uc.EvalStr("5 CCC 4")
      End Sub
   End Module
				
			
Name: aaa
Data type: double
Param count: 0
Procedure type: Function
Definition: Function: AAA() As Double
Description: Does this and that
---
Name: bbb
Data type: string
Param count: 3
Procedure type: Function
Definition: Function: BBB(x, y, z) As String
Description: Does something else
---
Name: ccc
Data type: int
Param count: 2
Procedure type: Operator
Definition: Operator: {x} CCC {y} As Int32
Description: 
---