aboutsummaryrefslogtreecommitdiffstats
path: root/storage/memory
diff options
context:
space:
mode:
Diffstat (limited to 'storage/memory')
-rw-r--r--storage/memory/object.go35
-rw-r--r--storage/memory/object_test.go4
-rw-r--r--storage/memory/storage.go9
-rw-r--r--storage/memory/storage_test.go16
4 files changed, 30 insertions, 34 deletions
diff --git a/storage/memory/object.go b/storage/memory/object.go
index 125e887..1720ebd 100644
--- a/storage/memory/object.go
+++ b/storage/memory/object.go
@@ -9,19 +9,29 @@ import (
// Object on memory core.Object implementation
type Object struct {
- t core.ObjectType
- h core.Hash
- content []byte
- size int64
+ t core.ObjectType
+ h core.Hash
+ cont []byte
+ sz int64
+}
+
+// NewObject creates a new object with the given type and content
+func NewObject(typ core.ObjectType, size int64, cont []byte) *Object {
+ return &Object{
+ t: typ,
+ h: core.ComputeHash(typ, cont),
+ cont: cont,
+ sz: int64(len(cont)),
+ }
}
// Hash return the object Hash, the hash is calculated on-the-fly the first
-// time is called, the subsequent calls the same Hash is returned even in the
+// time is called, the subsequent calls the same Hash is returned even if the
// type or the content has changed. The Hash is only generated if the size of
// the content is exactly the Object.Size
func (o *Object) Hash() core.Hash {
- if o.h == core.ZeroHash && int64(len(o.content)) == o.size {
- o.h = core.ComputeHash(o.t, o.content)
+ if o.h == core.ZeroHash && int64(len(o.cont)) == o.sz {
+ o.h = core.ComputeHash(o.t, o.cont)
}
return o.h
@@ -34,14 +44,17 @@ func (o *Object) Type() core.ObjectType { return o.t }
func (o *Object) SetType(t core.ObjectType) { o.t = t }
// Size return the size of the object
-func (o *Object) Size() int64 { return o.size }
+func (o *Object) Size() int64 { return o.sz }
// SetSize set the object size, the given size should be written afterwards
-func (o *Object) SetSize(s int64) { o.size = s }
+func (o *Object) SetSize(s int64) { o.sz = s }
+
+// Content returns the contents of the object
+func (o *Object) Content() []byte { return o.cont }
// Reader returns a core.ObjectReader used to read the object's content.
func (o *Object) Reader() (core.ObjectReader, error) {
- return ioutil.NopCloser(bytes.NewBuffer(o.content)), nil
+ return ioutil.NopCloser(bytes.NewBuffer(o.cont)), nil
}
// Writer returns a core.ObjectWriter used to write the object's content.
@@ -50,7 +63,7 @@ func (o *Object) Writer() (core.ObjectWriter, error) {
}
func (o *Object) Write(p []byte) (n int, err error) {
- o.content = append(o.content, p...)
+ o.cont = append(o.cont, p...)
return len(p), nil
}
diff --git a/storage/memory/object_test.go b/storage/memory/object_test.go
index f2873fa..3271254 100644
--- a/storage/memory/object_test.go
+++ b/storage/memory/object_test.go
@@ -49,7 +49,7 @@ func (s *ObjectSuite) TestSize(c *C) {
}
func (s *ObjectSuite) TestReader(c *C) {
- o := &Object{content: []byte("foo")}
+ o := &Object{cont: []byte("foo")}
reader, err := o.Reader()
c.Assert(err, IsNil)
@@ -71,5 +71,5 @@ func (s *ObjectSuite) TestWriter(c *C) {
c.Assert(err, IsNil)
c.Assert(n, Equals, 3)
- c.Assert(o.content, DeepEquals, []byte("foo"))
+ c.Assert(o.cont, DeepEquals, []byte("foo"))
}
diff --git a/storage/memory/storage.go b/storage/memory/storage.go
index fbf4bc4..84de980 100644
--- a/storage/memory/storage.go
+++ b/storage/memory/storage.go
@@ -28,11 +28,6 @@ func NewObjectStorage() *ObjectStorage {
}
}
-// New returns a new empty memory.Object
-func (o *ObjectStorage) New() (core.Object, error) {
- return &Object{}, nil
-}
-
// Set stores an object, the object should be properly filled before set it.
func (o *ObjectStorage) Set(obj core.Object) (core.Hash, error) {
h := obj.Hash()
@@ -65,7 +60,7 @@ func (o *ObjectStorage) Get(h core.Hash) (core.Object, error) {
}
// Iter returns a core.ObjectIter for the given core.ObjectTybe
-func (o *ObjectStorage) Iter(t core.ObjectType) core.ObjectIter {
+func (o *ObjectStorage) Iter(t core.ObjectType) (core.ObjectIter, error) {
var series []core.Object
switch t {
case core.CommitObject:
@@ -77,7 +72,7 @@ func (o *ObjectStorage) Iter(t core.ObjectType) core.ObjectIter {
case core.TagObject:
series = flattenObjectMap(o.Tags)
}
- return core.NewObjectSliceIter(series)
+ return core.NewObjectSliceIter(series), nil
}
func flattenObjectMap(m map[core.Hash]core.Object) []core.Object {
diff --git a/storage/memory/storage_test.go b/storage/memory/storage_test.go
index df6d5cf..19f4476 100644
--- a/storage/memory/storage_test.go
+++ b/storage/memory/storage_test.go
@@ -9,20 +9,10 @@ type ObjectStorageSuite struct{}
var _ = Suite(&ObjectStorageSuite{})
-func (s *ObjectStorageSuite) TestNew(c *C) {
- os := NewObjectStorage()
-
- o, err := os.New()
- c.Assert(err, IsNil)
- c.Assert(o.Size(), Equals, int64(0))
-}
-
func (s *ObjectStorageSuite) TestSet(c *C) {
os := NewObjectStorage()
- o, err := os.New()
- c.Assert(err, IsNil)
-
+ o := &Object{}
o.SetType(core.CommitObject)
o.SetSize(3)
@@ -40,9 +30,7 @@ func (s *ObjectStorageSuite) TestSet(c *C) {
func (s *ObjectStorageSuite) TestGet(c *C) {
os := NewObjectStorage()
- o, err := os.New()
- c.Assert(err, IsNil)
-
+ o := &Object{}
o.SetType(core.CommitObject)
o.SetSize(3)