package database

//Table is an abstract data structure built on top of a db
type Table struct {
	prefix []byte
	db     Database
}

//NewTable creates a new table on the given database
func NewTable(db Database, prefix []byte) *Table {
	return &Table{
		prefix,
		db,
	}
}

// Has implements the database interface
func (t *Table) Has(key []byte) (bool, error) {
	key = append(t.prefix, key...)
	return t.db.Has(key)
}

// Put implements the database interface
func (t *Table) Put(key []byte, value []byte) error {
	key = append(t.prefix, key...)
	return t.db.Put(key, value)
}

// Get implements the database interface
func (t *Table) Get(key []byte) ([]byte, error) {
	key = append(t.prefix, key...)
	return t.db.Get(key)
}

// Delete implements the database interface
func (t *Table) Delete(key []byte) error {
	key = append(t.prefix, key...)
	return t.db.Delete(key)
}

// Close implements the database interface
func (t *Table) Close() error {
	return nil
}