invalid command name "::stooop::class"
while executing
"::stooop::class xifo {
proc xifo {this size} {
set ($this,size) $size
empty $this
}
proc ~xifo {this} {
variable..."
(in namespace eval "::request" script line 18)
invoked from within
"namespace eval ::request $script"
("::try" body line 12)
OUTPUT BUFFER:
# The lifo and fifo classes (for the stooop object oriented extension)
#
# Copyright (c) 2002 by Jean-Luc Fontaine .
# This code may be distributed under the same terms as Tcl.
#
# $Id: xifo.tcl,v 1.4 2004/07/19 19:12:45 jfontain Exp $
# Here is a sample FIFO/LIFO implementation with stooop.
# Sample test code is at the bottom of this file.
# Uncomment the following lines for the bottom sample code to work:
# package require stooop
# namespace import stooop::*
::stooop::class xifo {
proc xifo {this size} {
set ($this,size) $size
empty $this
}
proc ~xifo {this} {
variable ${this}data
catch {unset ${this}data}
}
proc in {this data} {
variable ${this}data
tidyUp $this
if {[array size ${this}data] >= $($this,size)} {
unset ${this}data($($this,first))
incr ($this,first)
}
set ${this}data([incr ($this,last)]) $data
}
proc tidyUp {this} { ;# warning: for internal use only
variable ${this}data
catch {
unset ${this}data($($this,unset))
unset ($this,unset)
}
}
proc empty {this} {
variable ${this}data
catch {unset ${this}data}
catch {unset ($this,unset)}
set ($this,first) 0
set ($this,last) -1
}
proc isEmpty {this} {
return [expr {$($this,last) < $($this,first)}]
}
::stooop::virtual proc out {this}
::stooop::virtual proc data {this}
}
::stooop::class lifo {
proc lifo {this {size 2147483647}} xifo {$size} {}
proc ~lifo {this} {}
proc out {this} {
xifo::tidyUp $this
if {[array size xifo::${this}data] == 0} {
error "lifo $this out error, empty"
}
# delay unsetting popped data to improve performance by avoiding a data
# copy:
set xifo::($this,unset) $xifo::($this,last)
incr xifo::($this,last) -1
return [set xifo::${this}data($xifo::($this,unset))]
}
proc data {this} {
set list {}
set first $xifo::($this,first)
for {set index $xifo::($this,last)} {$index >= $first} {incr index -1} {
lappend list [set xifo::${this}data($index)]
}
return $list
}
}
::stooop::class fifo {
proc fifo {this {size 2147483647}} xifo {$size} {}
proc ~fifo {this} {}
proc out {this} {
xifo::tidyUp $this
if {[array size xifo::${this}data] == 0} {
error "fifo $this out error, empty"
}
# delay unsetting popped data to improve performance by avoiding a data
# copy:
set xifo::($this,unset) $xifo::($this,first)
incr xifo::($this,first)
return [set xifo::${this}data($xifo::($this,unset))]
}
proc data {this} {
set list {}
set last $xifo::($this,last)
for {set index $xifo::($this,first)} {$index <= $last} {incr index} {
lappend list [set xifo::${this}data($index)]
}
return $list
}
}
# Here are a few lines of sample code:
# proc exercise {id} {
# for {set u 0} {$u < 10} {incr u} {
# xifo::in $id $u
# }
# puts [xifo::out $id]
# puts [xifo::data $id]
# xifo::in $id $u
# xifo::in $id [incr u]
# puts [xifo::data $id]
# }
# set id [stooop::new lifo 10]
# exercise $id
# stooop::delete $id
# set id [stooop::new fifo 10]
# exercise $id
# stooop::delete $id