Artifact ad0171bebe08b12ce2197e444b1237e9dfabf68a
File
tools/cvs2fossil/lib/id.tcl
part of check-in
[38b967dcf5]
- Merge aku's CVS import changes into the main line. Fix a small bug in diff.c.
by
drh on
2007-11-17 00:29:42.
Also file
tools/cvs2fossil/lib/id.tcl
part of check-in
[c3d5104084]
- Added code for the loading of pass II data (currently only the smybols) from the state when pass II is skipped.
by
aku on
2007-11-02 04:26:32.
# # ## ### ##### ######## #############
## A simple class for handling an in-memory index mapping from
## arbitrary strings to a small numeric id. Can be queried in reverse
## too, returning the string for the id.
## Id's are starting from 1.
# # ## ### ##### ######## #############
## Requirements.
package require Tcl ; # Runtime.
package require snit ; # OO runtime.
# # ## ### ##### ######## #############
## Implementation.
snit::type ::vc::tools::id {
# # ## ### ##### ######## #############
constructor {} {}
# # ## ### ##### ######## #############
## Public API.
## - Put data into the index, incl. query for id of key.
## - Lookup data for id.
method put {key} {
if {[info exists mydata($key)]} { return $mydata($key) }
incr mycounter
set mydata($key) $mycounter
set myinvert($mycounter) $key
return $mycounter
}
# Explicitly load the database with a mapping.
method map {id key} {
set mydata($key) $id
set myinvert($id) $key
}
method keyof {id} { return $myinvert($id) }
method get {} { return [array get mydata] }
# # ## ### ##### ######## #############
## Internal. State.
variable mydata -array {} ; # Map data -> id
variable myinvert -array {} ; # Map id -> data
variable mycounter 0 ; # Counter for id generation.
# # ## ### ##### ######## #############
}
namespace eval ::vc::tools {
namespace export id
}
# # ## ### ##### ######## #############
## Ready.
package provide vc::tools::id 1.0