Skip to content

Instantly share code, notes, and snippets.

@TheEmpty
Last active August 29, 2015 14:02
Show Gist options
  • Select an option

  • Save TheEmpty/eb4ad2ebd408686f375d to your computer and use it in GitHub Desktop.

Select an option

Save TheEmpty/eb4ad2ebd408686f375d to your computer and use it in GitHub Desktop.
trait Node {
var prev : Node = null
var next : Node = null
def ✂ : Node = { delete }
def unary_~ : Node = { delete }
def ⇠ : Node = { prev }
def ⇢ : Node = { next }
def ⇠? : Boolean = { prev == null }
def ⇢? : Boolean = { prev == null }
def ⇠(item : Node) : Node = { prev(item) }
def ⇢(item : Node) : Node = { next(item) }
def delete : Node = {
if(next != null) {
next.prev = prev
next = null
}
if(prev != null) {
prev.next = next
prev = null
}
this
}
def next(item : Node) : Node = {
item.prev = this
next = item
next
}
def prev(item : Node) : Node = {
item.next = this
prev = item
prev
}
}
class LinkedString extends Node { var data : String = _ }
object LinkedString {
def apply(str : String) : LinkedString = {
var l = new LinkedString
l.data = str
return l
}
}
object Driver {
def main(args : Array[String]) = {
val h = new LinkedString("Hello")
val w = new LinkedString("World")
val p = new LinkedString("!")
h ⇢ w ⇢ p
printf("%s %s%s%n", h.data, h.⇢.asInstanceOf[LinkedString].data, h.⇢.⇢.asInstanceOf[LinkedString].data)
h.✂ // h ✂; is also valid, but h ✂ is not.
printf("%s %s%n", h.data, h.⇢)
h next w
printf("%s %s%n", h.data, h.⇢.asInstanceOf[LinkedString].data)
~h
}
}
@TheEmpty
Copy link
Copy Markdown
Author

scala> Driver.main(Array[String]())
Hello World!
Hello null
Hello World

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