github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/blocks/set/dbset.go (about)

     1  package set
     2  
     3  import (
     4  	ds "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
     5  	"github.com/ipfs/go-ipfs/blocks/bloom"
     6  	key "github.com/ipfs/go-ipfs/blocks/key"
     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 key.Key) {
    23  	err := d.dstore.Put(k.DsKey(), []byte{})
    24  	if err != nil {
    25  		log.Debugf("blockset put error: %s", err)
    26  	}
    27  
    28  	d.bset.AddBlock(k)
    29  }
    30  
    31  func (d *datastoreBlockSet) RemoveBlock(k key.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 key.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() []key.Key {
    47  	return d.bset.GetKeys()
    48  }