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.
0000: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
0010: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
0020: 23 23 23 23 23 23 23 0a 0a 23 23 20 41 20 73 69 #######..## A si
0030: 6d 70 6c 65 20 63 6c 61 73 73 20 66 6f 72 20 68 mple class for h
0040: 61 6e 64 6c 69 6e 67 20 61 6e 20 69 6e 2d 6d 65 andling an in-me
0050: 6d 6f 72 79 20 69 6e 64 65 78 20 6d 61 70 70 69 mory index mappi
0060: 6e 67 20 66 72 6f 6d 0a 23 23 20 61 72 62 69 74 ng from.## arbit
0070: 72 61 72 79 20 73 74 72 69 6e 67 73 20 74 6f 20 rary strings to
0080: 61 20 73 6d 61 6c 6c 20 6e 75 6d 65 72 69 63 20 a small numeric
0090: 69 64 2e 20 43 61 6e 20 62 65 20 71 75 65 72 69 id. Can be queri
00a0: 65 64 20 69 6e 20 72 65 76 65 72 73 65 0a 23 23 ed in reverse.##
00b0: 20 74 6f 6f 2c 20 72 65 74 75 72 6e 69 6e 67 20 too, returning
00c0: 74 68 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74 the string for t
00d0: 68 65 20 69 64 2e 0a 0a 23 23 20 49 64 27 73 20 he id...## Id's
00e0: 61 72 65 20 73 74 61 72 74 69 6e 67 20 66 72 6f are starting fro
00f0: 6d 20 31 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 m 1...# # ## ###
0100: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
0110: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 #############.##
0120: 20 52 65 71 75 69 72 65 6d 65 6e 74 73 2e 0a 0a Requirements...
0130: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require
0140: 54 63 6c 20 20 3b 20 23 20 52 75 6e 74 69 6d 65 Tcl ; # Runtime
0150: 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 ..package requir
0160: 65 20 73 6e 69 74 20 3b 20 23 20 4f 4f 20 72 75 e snit ; # OO ru
0170: 6e 74 69 6d 65 2e 0a 0a 23 20 23 20 23 23 20 23 ntime...# # ## #
0180: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
0190: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
01a0: 23 23 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f ## Implementatio
01b0: 6e 2e 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a n...snit::type :
01c0: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 69 64 20 7b :vc::tools::id {
01d0: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
01e0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20 ############..
0200: 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b 7d constructor {}
0210: 20 7b 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 {}.. # # ##
0220: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
0230: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
0240: 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63 20 41 . ## Public A
0250: 50 49 2e 0a 20 20 20 20 23 23 20 2d 20 50 75 74 PI.. ## - Put
0260: 20 64 61 74 61 20 69 6e 74 6f 20 74 68 65 20 69 data into the i
0270: 6e 64 65 78 2c 20 69 6e 63 6c 2e 20 71 75 65 72 ndex, incl. quer
0280: 79 20 66 6f 72 20 69 64 20 6f 66 20 6b 65 79 2e y for id of key.
0290: 0a 20 20 20 20 23 23 20 2d 20 4c 6f 6f 6b 75 70 . ## - Lookup
02a0: 20 64 61 74 61 20 66 6f 72 20 69 64 2e 0a 0a 20 data for id...
02b0: 20 20 20 6d 65 74 68 6f 64 20 70 75 74 20 7b 6b method put {k
02c0: 65 79 7d 20 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f ey} {..if {[info
02d0: 20 65 78 69 73 74 73 20 6d 79 64 61 74 61 28 24 exists mydata($
02e0: 6b 65 79 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 key)]} { return
02f0: 24 6d 79 64 61 74 61 28 24 6b 65 79 29 20 7d 0a $mydata($key) }.
0300: 09 69 6e 63 72 20 6d 79 63 6f 75 6e 74 65 72 0a .incr mycounter.
0310: 0a 09 73 65 74 20 6d 79 64 61 74 61 28 24 6b 65 ..set mydata($ke
0320: 79 29 20 20 20 24 6d 79 63 6f 75 6e 74 65 72 0a y) $mycounter.
0330: 09 73 65 74 20 6d 79 69 6e 76 65 72 74 28 24 6d .set myinvert($m
0340: 79 63 6f 75 6e 74 65 72 29 20 24 6b 65 79 0a 0a ycounter) $key..
0350: 09 72 65 74 75 72 6e 20 24 6d 79 63 6f 75 6e 74 .return $mycount
0360: 65 72 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 er. }.. me
0370: 74 68 6f 64 20 6b 65 79 6f 66 20 7b 69 64 7d 20 thod keyof {id}
0380: 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 6e 76 65 { return $myinve
0390: 72 74 28 24 69 64 29 20 7d 0a 0a 20 20 20 20 23 rt($id) }.. #
03a0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
03b0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
03c0: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e ######. ## In
03d0: 74 65 72 6e 61 6c 2e 20 53 74 61 74 65 2e 0a 0a ternal. State...
03e0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 variable myd
03f0: 61 74 61 20 20 20 2d 61 72 72 61 79 20 7b 7d 20 ata -array {}
0400: 3b 20 23 20 4d 61 70 20 64 61 74 61 20 2d 3e 20 ; # Map data ->
0410: 69 64 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 id. variable
0420: 6d 79 69 6e 76 65 72 74 20 2d 61 72 72 61 79 20 myinvert -array
0430: 7b 7d 20 3b 20 23 20 4d 61 70 20 69 64 20 2d 3e {} ; # Map id ->
0440: 20 64 61 74 61 0a 20 20 20 20 76 61 72 69 61 62 data. variab
0450: 6c 65 20 6d 79 63 6f 75 6e 74 65 72 20 20 20 20 le mycounter
0460: 20 20 20 20 30 20 3b 20 23 20 43 6f 75 6e 74 65 0 ; # Counte
0470: 72 20 66 6f 72 20 69 64 20 67 65 6e 65 72 61 74 r for id generat
0480: 69 6f 6e 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 ion... # # ##
0490: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
04a0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
04b0: 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 #.}..namespace e
04c0: 76 61 6c 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 20 val ::vc::tools
04d0: 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 {. namespace
04e0: 65 78 70 6f 72 74 20 69 64 0a 7d 0a 0a 23 20 23 export id.}..# #
04f0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
0500: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0510: 23 23 23 23 0a 23 23 20 52 65 61 64 79 2e 0a 0a ####.## Ready...
0520: 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 package provide
0530: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 69 64 20 31 2e vc::tools::id 1.
0540: 30 0a 0.