Artifact 43c9bdd4801b71812debc9981b55044d618b7f62
File
tools/cvs2fossil/lib/id.tcl
part of check-in
[99e165d5c4]
- Created a separate common class for the id databases used by the repository, and updated the repository code to use it.
by
aku on
2007-10-21 04:42:14.
# # ## ### ##### ######## #############
## 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
}
method keyof {id} { return $myinvert($id) }
# # ## ### ##### ######## #############
## 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