home *** CD-ROM | disk | FTP | other *** search
/ Practical Programming in Tcl & Tk (4th Edition) / TCLBOOK4.BIN / pc / exsource.old / 8_12.tcl < prev    next >
Text File  |  2003-04-15  |  886b  |  46 lines

  1. #
  2. # Example 8-12
  3. # A simple in-memory database.
  4. #
  5.  
  6. namespace eval db {
  7.     variable data                        ;# Array of data blobs
  8.     variable uid 0                        ;# Index into data
  9.     variable index                        ;# Cross references into data
  10. }
  11. proc db::insert {keylist datablob} {
  12.     variable data
  13.     variable uid
  14.     variable index
  15.     set data([incr uid]) $datablob
  16.     foreach key $keylist {
  17.         lappend index($key) $uid
  18.     }
  19. }
  20. proc db::get {key} {
  21.     variable data
  22.     variable index
  23.     set result {}
  24.     if {![info exist index($key)]} {
  25.         return {}
  26.     }
  27.     foreach uid $index($key) {
  28.         lappend result $data($uid)
  29.     }
  30.     return $result
  31. }
  32. proc db::save {filename} {
  33.     variable uid
  34.     set out [open $filename w]
  35.     puts $out [list namespace eval db \
  36.         [list variable uid $uid]]
  37.     puts $out [list array set db::data [array get db::data]]
  38.     puts $out [list array set db::index [array get db::index]]
  39.     close $out
  40. }
  41. proc db::load {filename} {
  42.     source $filename
  43. }
  44.  
  45.  
  46.