Skip to content

Instantly share code, notes, and snippets.

@SiarheiFedartsou
Last active August 29, 2015 14:02
Show Gist options
  • Save SiarheiFedartsou/563c303c8fa698f123ab to your computer and use it in GitHub Desktop.
Save SiarheiFedartsou/563c303c8fa698f123ab to your computer and use it in GitHub Desktop.
struct Stack<T> : Sequence {
struct StackNode
{
var value: T
var next: Any? = nil
}
struct StackGenerator : Generator {
var top : StackNode? = nil
init(top: StackNode?) {
self.top = top;
}
mutating func next() -> T? {
var value = self.top?.value
self.top = self.top?.next as? StackNode
return value ? value! : nil
}
}
var top : StackNode? = nil
mutating func push(value: T) {
self.top = StackNode(value: value, next: self.top as Any?)
}
mutating func pop() -> T? {
var value = self.top?.value
self.top = self.top?.next as? StackNode
return value ? value! : nil
}
func generate() -> StackGenerator
{
return StackGenerator(top: self.top)
}
}
@oleksii-demedetskyi
Copy link

struct StackNode<T>
{
    typealias Node StackNode<T>
    var value: T
    var next: Node = nil
}

will it work?

@SiarheiFedartsou
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment