Hex Artifact Content
Not logged in

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.