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.
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 23 20 er. }.. #
0370: 45 78 70 6c 69 63 69 74 6c 79 20 6c 6f 61 64 20 Explicitly load
0380: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69 74 the database wit
0390: 68 20 61 20 6d 61 70 70 69 6e 67 2e 0a 20 20 20 h a mapping..
03a0: 20 6d 65 74 68 6f 64 20 6d 61 70 20 7b 69 64 20 method map {id
03b0: 6b 65 79 7d 20 7b 0a 09 73 65 74 20 6d 79 64 61 key} {..set myda
03c0: 74 61 28 24 6b 65 79 29 20 20 20 24 69 64 0a 09 ta($key) $id..
03d0: 73 65 74 20 6d 79 69 6e 76 65 72 74 28 24 69 64 set myinvert($id
03e0: 29 20 24 6b 65 79 0a 20 20 20 20 7d 0a 0a 20 20 ) $key. }..
03f0: 20 20 6d 65 74 68 6f 64 20 6b 65 79 6f 66 20 7b method keyof {
0400: 69 64 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 id} { return $my
0410: 69 6e 76 65 72 74 28 24 69 64 29 20 7d 0a 20 20 invert($id) }.
0420: 20 20 6d 65 74 68 6f 64 20 67 65 74 20 20 20 7b method get {
0430: 7d 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 61 72 } { return [ar
0440: 72 61 79 20 67 65 74 20 6d 79 64 61 74 61 5d 20 ray get mydata]
0450: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ##
0460: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
0470: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############.
0480: 20 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 2e 20 ## Internal.
0490: 53 74 61 74 65 2e 0a 0a 20 20 20 20 76 61 72 69 State... vari
04a0: 61 62 6c 65 20 6d 79 64 61 74 61 20 20 20 2d 61 able mydata -a
04b0: 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 rray {} ; # Map
04c0: 64 61 74 61 20 2d 3e 20 69 64 0a 20 20 20 20 76 data -> id. v
04d0: 61 72 69 61 62 6c 65 20 6d 79 69 6e 76 65 72 74 ariable myinvert
04e0: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d -array {} ; # M
04f0: 61 70 20 69 64 20 2d 3e 20 64 61 74 61 0a 20 20 ap id -> data.
0500: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 63 6f 75 variable mycou
0510: 6e 74 65 72 20 20 20 20 20 20 20 20 30 20 3b 20 nter 0 ;
0520: 23 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 69 64 # Counter for id
0530: 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 0a 20 20 generation...
0540: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
0550: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
0560: 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d #########.}..nam
0570: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 espace eval ::vc
0580: 3a 3a 74 6f 6f 6c 73 20 7b 0a 20 20 20 20 6e 61 ::tools {. na
0590: 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 69 mespace export i
05a0: 64 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 d.}..# # ## ###
05b0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
05c0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 ############.##
05d0: 52 65 61 64 79 2e 0a 0a 70 61 63 6b 61 67 65 20 Ready...package
05e0: 70 72 6f 76 69 64 65 20 76 63 3a 3a 74 6f 6f 6c provide vc::tool
05f0: 73 3a 3a 69 64 20 31 2e 30 0a s::id 1.0.