b7124e6e695e22132f4d75536e5af75333f8116e
[chise/ruby.git] / chise / chisedb.rb
1 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
2
3 require "singleton"
4 require "chise/libchise"
5
6 module CHISE
7   class ChiseDB
8     include Singleton
9
10     def initialize
11       db_dir = CHISE::DataSource::DB_DIR
12       @ds = DataSource.new(CHISE::DataSource::Berkeley_DB, db_dir, 0, 0755)
13       @byids_db = {}
14     end
15
16     def location() @ds.location; end
17
18     def get_feature(f) @ds.get_feature(f) end
19
20     def get_ccs(c) @ds.get_ccs(c) end
21
22     def decode_char(n, cid) @ds.decode_char(n, cid) end
23
24     def load_feature(n, cid) @ds.load_feature(n, cid) end
25
26     def each_feature_name() @ds.each_feature_name {|f| yield f } end
27
28     #def each_ccs() @ds.each_ccs {|c| yield c } end
29
30     def get_by_ids_db(n)
31       @byids_db[n] = ByIDS_DB.new(@ds, n) if @byids_db[n].nil?
32       @byids_db[n]
33     end
34   end
35
36   class FeatureDB
37     def initialize(ds, name)
38       @ds, @name = ds, name
39     end
40     
41   end
42
43   class CCS_DB
44   end
45
46
47   class ByIDS_DB
48     include ChiseValue
49     include TableAccessModule
50
51     def initialize(ds, name)
52       @ds, @name = ds, name
53       @category, @keyvalue = "character", "by_ids"
54       reset
55     end
56
57     def decode(ids)
58       setup_db
59       return nil if @db.nil?
60       parse_c_string(@db.get(ids))
61     end
62
63     def set_decoded_char(ids, cid)
64       setup_db(true)
65       raise "@db is nil." if @db.nil?
66       @db.put(ids, format_char_id(cid))
67     end
68
69     def each
70       setup_db
71       raise "@db is nil." if @db.nil?
72       @db.each {|k, v|
73         yield(parse_value(k), parse_c_string(v))
74       }
75     end
76   end
77 end