September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
89
Task/Queue-Definition/FreeBASIC/queue-definition-1.freebasic
Normal file
89
Task/Queue-Definition/FreeBASIC/queue-definition-1.freebasic
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
' FB 1.05.0 Win64
|
||||
|
||||
' queue_rosetta.bi
|
||||
' simple generic Queue type
|
||||
|
||||
#Define Queue(T) Queue_##T
|
||||
|
||||
#Macro Declare_Queue(T)
|
||||
Type Queue(T)
|
||||
Public:
|
||||
Declare Constructor()
|
||||
Declare Destructor()
|
||||
Declare Property capacity As Integer
|
||||
Declare Property count As Integer
|
||||
Declare Property empty As Boolean
|
||||
Declare Property front As T
|
||||
Declare Function pop() As T
|
||||
Declare Sub push(item As T)
|
||||
Private:
|
||||
a(any) As T
|
||||
count_ As Integer = 0
|
||||
Declare Function resize(size As Integer) As Integer
|
||||
End Type
|
||||
|
||||
Constructor Queue(T)()
|
||||
Redim a(0 To 0) '' create a default T instance for various purposes
|
||||
End Constructor
|
||||
|
||||
Destructor Queue(T)()
|
||||
Erase a
|
||||
End Destructor
|
||||
|
||||
Property Queue(T).capacity As Integer
|
||||
Return UBound(a)
|
||||
End Property
|
||||
|
||||
Property Queue(T).count As Integer
|
||||
Return count_
|
||||
End Property
|
||||
|
||||
Property Queue(T).empty As Boolean
|
||||
Return count_ = 0
|
||||
End Property
|
||||
|
||||
Property Queue(T).front As T
|
||||
If count_ > 0 Then
|
||||
Return a(1)
|
||||
End If
|
||||
Print "Error: Attempted to access 'front' element of an empty queue"
|
||||
Return a(0) '' return default element
|
||||
End Property
|
||||
|
||||
Function Queue(T).pop() As T
|
||||
If count_ > 0 Then
|
||||
Dim value As T = a(1)
|
||||
If count_ > 1 Then '' move remaining elements to fill space vacated
|
||||
For i As Integer = 2 To count_
|
||||
a(i - 1) = a(i)
|
||||
Next
|
||||
End If
|
||||
a(count_) = a(0) '' zero last element
|
||||
count_ -= 1
|
||||
Return value
|
||||
End If
|
||||
Print "Error: Attempted to remove 'front' element of an empty queue"
|
||||
Return a(0) '' return default element
|
||||
End Function
|
||||
|
||||
Sub Queue(T).push(item As T)
|
||||
Dim size As Integer = UBound(a)
|
||||
count_ += 1
|
||||
If count_ > size Then
|
||||
size = resize(size)
|
||||
Redim Preserve a(0 to size)
|
||||
End If
|
||||
a(count_) = item
|
||||
End Sub
|
||||
|
||||
Function Queue(T).resize(size As Integer) As Integer
|
||||
If size = 0 Then
|
||||
size = 4
|
||||
ElseIf size <= 32 Then
|
||||
size = 2 * size
|
||||
Else
|
||||
size += 32
|
||||
End If
|
||||
Return size
|
||||
End Function
|
||||
#EndMacro
|
||||
53
Task/Queue-Definition/FreeBASIC/queue-definition-2.freebasic
Normal file
53
Task/Queue-Definition/FreeBASIC/queue-definition-2.freebasic
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
' FB 1.05.0 Win64
|
||||
|
||||
#Include "queue_rosetta.bi"
|
||||
|
||||
Type Cat
|
||||
name As String
|
||||
age As Integer
|
||||
Declare Constructor
|
||||
Declare Constructor(name_ As string, age_ As integer)
|
||||
Declare Operator Cast() As String
|
||||
end type
|
||||
|
||||
Constructor Cat '' default constructor
|
||||
End Constructor
|
||||
|
||||
Constructor Cat(name_ As String, age_ As Integer)
|
||||
name = name_
|
||||
age = age_
|
||||
End Constructor
|
||||
|
||||
Operator Cat.Cast() As String
|
||||
Return "[" + name + ", " + Str(age) + "]"
|
||||
End Operator
|
||||
|
||||
Declare_Queue(Cat) '' expand Queue type for Cat instances
|
||||
|
||||
Dim CatQueue As Queue(Cat)
|
||||
|
||||
Var felix = Cat("Felix", 8)
|
||||
Var sheba = Cat("Sheba", 4)
|
||||
Var fluffy = Cat("Fluffy", 2)
|
||||
With CatQueue '' push these Cat instances into the Queue
|
||||
.push(felix)
|
||||
.push(sheba)
|
||||
.push(fluffy)
|
||||
End With
|
||||
Print "Number of Cats in the Queue :" ; CatQueue.count
|
||||
Print "Capacity of Cat Queue :" ; CatQueue.capacity
|
||||
Print "Front Cat : "; CatQueue.front
|
||||
CatQueue.pop()
|
||||
Print "Front Cat now : "; CatQueue.front
|
||||
Print "Number of Cats in the Queue :" ; CatQueue.count
|
||||
CatQueue.pop()
|
||||
Print "Front Cat now : "; CatQueue.front
|
||||
Print "Number of Cats in the Queue :" ; CatQueue.count
|
||||
Print "Is Queue empty now : "; CatQueue.empty
|
||||
catQueue.pop()
|
||||
Print "Number of Cats in the Queue :" ; CatQueue.count
|
||||
Print "Is Queue empty now : "; CatQueue.empty
|
||||
catQueue.pop()
|
||||
Print
|
||||
Print "Press any key to quit"
|
||||
Sleep
|
||||
Loading…
Add table
Add a link
Reference in a new issue