Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
9ebf3ae6
提交
9ebf3ae6
authored
10月 08, 2014
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
keytransform ds
上级
093c8fb0
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
149 行增加
和
1 行删除
+149
-1
Godeps.json
Godeps/Godeps.json
+1
-1
keytransform.go
...thub.com/jbenet/datastore.go/keytransform/keytransform.go
+88
-0
keytransform_test.go
...com/jbenet/datastore.go/keytransform/keytransform_test.go
+60
-0
没有找到文件。
Godeps/Godeps.json
浏览文件 @
9ebf3ae6
...
...
@@ -64,7 +64,7 @@
},
{
"ImportPath"
:
"github.com/jbenet/datastore.go"
,
"Rev"
:
"
e7d6f7cb9e3c207a04c5397c449d10a6f9d403a0
"
"Rev"
:
"
60ebc56447b5a8264cfed3ae3ff48deb984d7cf1
"
},
{
"ImportPath"
:
"github.com/jbenet/go-base58"
,
...
...
Godeps/_workspace/src/github.com/jbenet/datastore.go/keytransform/keytransform.go
0 → 100644
浏览文件 @
9ebf3ae6
package
keytransform
import
ds
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
// KeyTransform is a function that transforms one key into another.
type
KeyTransform
func
(
ds
.
Key
)
ds
.
Key
// Datastore is a keytransform.Datastore
type
Datastore
interface
{
ds
.
Shim
// Transform runs the transformation function
Transform
(
ds
.
Key
)
ds
.
Key
// TransformFunc returns the KeyTransform function
TransformFunc
()
KeyTransform
}
// ktds keeps a KeyTransform function
type
ktds
struct
{
child
ds
.
Datastore
xform
KeyTransform
}
// WrapDatastore wraps a given datastore with a KeyTransform function.
// The resulting wrapped datastore will use the transform on all Datastore
// operations.
func
WrapDatastore
(
child
ds
.
Datastore
,
f
KeyTransform
)
Datastore
{
if
f
==
nil
{
panic
(
"f (KeyTransform) is nil"
)
}
if
child
==
nil
{
panic
(
"child (ds.Datastore) is nil"
)
}
return
&
ktds
{
child
,
f
}
}
// TransformFunc returns the KeyTransform function
func
(
d
*
ktds
)
TransformFunc
()
KeyTransform
{
return
d
.
xform
}
// Transform runs the KeyTransform function
func
(
d
*
ktds
)
Transform
(
k
ds
.
Key
)
ds
.
Key
{
return
d
.
xform
(
k
)
}
// Children implements ds.Shim
func
(
d
*
ktds
)
Children
()
[]
ds
.
Datastore
{
return
[]
ds
.
Datastore
{
d
.
child
}
}
// Put stores the given value, transforming the key first.
func
(
d
*
ktds
)
Put
(
key
ds
.
Key
,
value
interface
{})
(
err
error
)
{
return
d
.
child
.
Put
(
d
.
Transform
(
key
),
value
)
}
// Get returns the value for given key, transforming the key first.
func
(
d
*
ktds
)
Get
(
key
ds
.
Key
)
(
value
interface
{},
err
error
)
{
return
d
.
child
.
Get
(
d
.
Transform
(
key
))
}
// Has returns whether the datastore has a value for a given key, transforming
// the key first.
func
(
d
*
ktds
)
Has
(
key
ds
.
Key
)
(
exists
bool
,
err
error
)
{
return
d
.
child
.
Has
(
d
.
Transform
(
key
))
}
// Delete removes the value for given key
func
(
d
*
ktds
)
Delete
(
key
ds
.
Key
)
(
err
error
)
{
return
d
.
child
.
Delete
(
d
.
Transform
(
key
))
}
// KeyList returns a list of all keys in the datastore, transforming keys out.
func
(
d
*
ktds
)
KeyList
()
([]
ds
.
Key
,
error
)
{
keys
,
err
:=
d
.
child
.
KeyList
()
if
err
!=
nil
{
return
nil
,
err
}
for
i
,
k
:=
range
keys
{
keys
[
i
]
=
d
.
Transform
(
k
)
}
return
keys
,
nil
}
Godeps/_workspace/src/github.com/jbenet/datastore.go/keytransform/keytransform_test.go
0 → 100644
浏览文件 @
9ebf3ae6
package
keytransform_test
import
(
"bytes"
"testing"
ds
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
kt
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go/keytransform"
.
"launchpad.net/gocheck"
)
// Hook up gocheck into the "go test" runner.
func
Test
(
t
*
testing
.
T
)
{
TestingT
(
t
)
}
type
DSSuite
struct
{
dir
string
ds
ds
.
Datastore
}
var
_
=
Suite
(
&
DSSuite
{})
func
(
ks
*
DSSuite
)
TestBasic
(
c
*
C
)
{
mpds
:=
ds
.
NewMapDatastore
()
ktds
:=
kt
.
WrapDatastore
(
mpds
,
func
(
k
ds
.
Key
)
ds
.
Key
{
return
k
.
Reverse
()
})
keys
:=
strsToKeys
([]
string
{
"foo"
,
"foo/bar"
,
"foo/bar/baz"
,
"foo/barb"
,
"foo/bar/bazb"
,
"foo/bar/baz/barb"
,
})
for
_
,
k
:=
range
keys
{
err
:=
ktds
.
Put
(
k
,
[]
byte
(
k
.
String
()))
c
.
Check
(
err
,
Equals
,
nil
)
}
for
_
,
k
:=
range
keys
{
v1
,
err
:=
ktds
.
Get
(
k
)
c
.
Check
(
err
,
Equals
,
nil
)
c
.
Check
(
bytes
.
Equal
(
v1
.
([]
byte
),
[]
byte
(
k
.
String
())),
Equals
,
true
)
v2
,
err
:=
mpds
.
Get
(
k
.
Reverse
())
c
.
Check
(
err
,
Equals
,
nil
)
c
.
Check
(
bytes
.
Equal
(
v2
.
([]
byte
),
[]
byte
(
k
.
String
())),
Equals
,
true
)
}
}
func
strsToKeys
(
strs
[]
string
)
[]
ds
.
Key
{
keys
:=
make
([]
ds
.
Key
,
len
(
strs
))
for
i
,
s
:=
range
strs
{
keys
[
i
]
=
ds
.
NewKey
(
s
)
}
return
keys
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论