github.com/zignig/go-ipfs@v0.0.0-20141111235910-c9e5fdf55a52/blocks/set/dbset.go (about)

     1  package set
     2  
     3  import (
     4  	ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
     5  	"github.com/jbenet/go-ipfs/blocks/bloom"
     6  	"github.com/jbenet/go-ipfs/util"
     7  )
     8  
     9  type datastoreBlockSet struct {
    10  	dstore ds.Datastore
    11  	bset   BlockSet
    12  }
    13  
    14  // NewDBWrapperSet returns a new blockset wrapping a given datastore
    15  func NewDBWrapperSet(d ds.Datastore, bset BlockSet) BlockSet {
    16  	return &datastoreBlockSet{
    17  		dstore: d,
    18  		bset:   bset,
    19  	}
    20  }
    21  
    22  func (d *datastoreBlockSet) AddBlock(k util.Key) {
    23  	err := d.dstore.Put(k.DsKey(), []byte{})
    24  	if err != nil {
    25  		log.Errorf("blockset put error: %s", err)
    26  	}
    27  
    28  	d.bset.AddBlock(k)
    29  }
    30  
    31  func (d *datastoreBlockSet) RemoveBlock(k util.Key) {
    32  	d.bset.RemoveBlock(k)
    33  	if !d.bset.HasKey(k) {
    34  		d.dstore.Delete(k.DsKey())
    35  	}
    36  }
    37  
    38  func (d *datastoreBlockSet) HasKey(k util.Key) bool {
    39  	return d.bset.HasKey(k)
    40  }
    41  
    42  func (d *datastoreBlockSet) GetBloomFilter() bloom.Filter {
    43  	return d.bset.GetBloomFilter()
    44  }
    45  
    46  func (d *datastoreBlockSet) GetKeys() []util.Key {
    47  	return d.bset.GetKeys()
    48  }