Class: Traildb::TrailDBConstructor
- Inherits:
-
FFI::AutoPointer
- Object
- FFI::AutoPointer
- Traildb::TrailDBConstructor
- Defined in:
- lib/traildb.rb
Class Method Summary collapse
Instance Method Summary collapse
- #add(uuid, tstamp, values) ⇒ Object
- #append(db) ⇒ Object
- #finalize ⇒ Object
-
#initialize(path, ofields = []) ⇒ TrailDBConstructor
constructor
A new instance of TrailDBConstructor.
Constructor Details
#initialize(path, ofields = []) ⇒ TrailDBConstructor
Returns a new instance of TrailDBConstructor.
136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/traildb.rb', line 136 def initialize(path, ofields=[]) raise TrailDBError.new("Path is required") if path.nil? super Traildb.tdb_cons_init() n = ofields.size ofield_names = FFI::MemoryPointer.new(:string, n) ofield_names.write_array_of_pointer(ofields.map{|field|FFI::MemoryPointer.from_string(field)}) ret = Traildb.tdb_cons_open(self, path, ofield_names, n) raise TrailDBError.new("Cannot open constructor", ret) if ret != 0 @path = path @ofields = ofields end |
Class Method Details
.release(ptr) ⇒ Object
175 176 177 |
# File 'lib/traildb.rb', line 175 def self.release(ptr) Traildb.tdb_cons_close(ptr) end |
Instance Method Details
#add(uuid, tstamp, values) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/traildb.rb', line 148 def add(uuid, tstamp, values) tstamp = tstamp.to_i if tstamp.is_a? Time uuid = Traildb.uuid_raw(uuid) n = @ofields.size value_array = FFI::MemoryPointer.new(:string, n) value_array.write_array_of_pointer(values.map{|v|v.nil? ? nil : FFI::MemoryPointer.from_string(v)}) value_lengths = FFI::MemoryPointer.new(:uint64, n) value_lengths.write_array_of_uint64(values.map{|v|v.nil? ? 0 : v.size}) ret = Traildb.tdb_cons_add(self, uuid, tstamp, value_array, value_lengths) raise TrailDBError.new("Too many values: %s" % values[ret]) if ret != 0 end |
#append(db) ⇒ Object
160 161 162 163 164 165 166 167 |
# File 'lib/traildb.rb', line 160 def append(db) f = Traildb.tdb_cons_append(self, db) if f < 0 raise TrailDBError.new("Wrong number of fields: %d" % db.num_fields, f) elsif f > 0 raise TrailDBError.new("Too many values", f) end end |
#finalize ⇒ Object
169 170 171 172 173 |
# File 'lib/traildb.rb', line 169 def finalize ret = Traildb.tdb_cons_finalize(self) raise TrailDBError.new("Could not finalize", ret) if ret != 0 TrailDB.new(@path) end |