Hex Artifact Content
Not logged in

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.