Show/Hide Toolbars

XSharp

Stack Example
This example shows that we can now create generic classes with X# !
In the Stack class the T parameter will be replaced with a type at compile time.
 

/*
Stack Example - Written by Robert van der Hulst
This example shows that we can now create generic classes with X# !
Note: Compile with the /AZ option
*/
 
USING System.Collections.Generic
USING STATIC System.Console
 
FUNCTION Start AS VOID
  LOCAL oStack AS Stack<INT>                    
  LOCAL i AS LONG                      
  TRY
  oStack := Stack<INT>{25}
     WriteLine("Created a stack with {0} items",oStack:Capacity)
     WriteLine("Pushing 10 items")
    FOR I := 1 TO 10
        oStack:Push(i)
    NEXT
     WriteLine("Popping the stack until it is empty")
  i := 0
  WHILE oStack:Size > 0
      i += 1
     WriteLine(oStack:Pop())
  END
  WriteLine("{0} Items popped from the stack",i)
  WriteLine("Press Enter")
  ReadLine()
  WriteLine("The next line pops from an empty stack and throws an exception")  
  ReadLine()
  WriteLine(oStack:Pop())
  CATCH e AS Exception
     WriteLine("An exception was catched: {0}", e:Message)
  END TRY
  WriteLine("Press Enter to Exit")
  ReadLine()
  RETURN                            
 
CLASS Stack<T> WHERE T IS STRUCT, NEW()
  PROTECT _Items       AS T[]
  PROTECT _Size       AS INT
  PROTECT _Capacity   AS INT  
  PROPERTY Size       AS INT GET _Size
  PROPERTY Capacity   AS INT GET _Capacity
 
  CONSTRUCTOR()
    SELF(100)    
     
  CONSTRUCTOR(nCapacity AS INT)
     _Capacity := nCapacity
     _Items := T[]{nCapacity}
     _Size  := 0
    RETURN
 
  PUBLIC METHOD Push( item AS T) AS VOID
    IF _Size >= _Capacity
        THROW StackOverFlowException{}
    ENDIF
     _Items[_Size] := item
     _Size++              
    RETURN
 
  PUBLIC METHOD Pop( ) AS T
      _Size--
      IF _Size >= 0
        RETURN _Items[_Size]
      ELSE
         _Size := 0
         THROW Exception{"Cannot pop from an empty stack"}
      ENDIF
END CLASS