Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
morton
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Pavel Kácha
morton
Commits
6d5ad73f
Commit
6d5ad73f
authored
May 24, 2017
by
Pavel Kácha
Browse files
Options
Downloads
Patches
Plain Diff
Added possibility to store variable length byte strings as values
parent
afba8345
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
kyoto.py
+37
-8
37 additions, 8 deletions
kyoto.py
with
37 additions
and
8 deletions
kyoto.py
+
37
−
8
View file @
6d5ad73f
...
...
@@ -5,7 +5,7 @@ from kyotocabinet import DB, conv_bytes
class
database
:
def
__init__
(
self
,
name
,
keybytes
=
8
,
valbytes
=
8
):
def
__init__
(
self
,
name
,
keybytes
=
8
,
valbytes
=
None
):
self
.
name
=
name
self
.
filename
=
self
.
name
+
"
.kct
"
self
.
keybytes
=
keybytes
...
...
@@ -18,7 +18,10 @@ class database:
return
key
.
to_bytes
(
self
.
keybytes
,
"
big
"
,
signed
=
False
)
def
_to_val
(
self
,
val
):
if
self
.
valbytes
:
return
val
.
to_bytes
(
self
.
valbytes
,
"
big
"
,
signed
=
False
)
else
:
return
val
def
_from_bytes
(
self
,
val
):
return
int
.
from_bytes
(
val
,
"
big
"
,
signed
=
False
)
...
...
@@ -29,13 +32,24 @@ class database:
def
get
(
self
,
key
):
val
=
self
.
db
.
get
(
self
.
_to_key
(
key
))
if
val
is
not
None
:
if
self
.
valbytes
:
return
[
self
.
_from_bytes
(
val
[
i
:
i
+
self
.
valbytes
])
for
i
in
range
(
0
,
len
(
val
),
self
.
valbytes
)]
else
:
return
[
val
]
else
:
return
None
def
jump
(
self
,
key
):
return
self
.
cursor
.
jump
(
self
.
_to_key
(
key
))
def
get_new_key
(
self
):
self
.
cursor
.
jump_back
()
key
=
self
.
cursor
.
get_key
()
if
not
key
:
return
0
else
:
return
self
.
_from_bytes
(
key
)
+
1
def
get_range_key
(
self
,
lo
,
hi
):
if
not
self
.
jump
(
lo
):
return
None
...
...
@@ -58,8 +72,11 @@ class database:
item
=
self
.
cursor
.
get
()
self
.
cursor
.
step
()
while
item
is
not
None
and
item
[
0
]
<=
self
.
_to_key
(
hi
):
if
self
.
valbytes
:
for
i
in
range
(
0
,
len
(
item
[
1
]),
self
.
valbytes
):
yield
self
.
_from_bytes
(
item
[
0
]),
self
.
_from_bytes
(
item
[
1
][
i
:
i
+
self
.
valbytes
])
else
:
yield
self
.
_from_bytes
(
item
[
0
]),
item
[
1
]
item
=
self
.
cursor
.
get
()
self
.
cursor
.
step
()
...
...
@@ -79,8 +96,11 @@ class database:
item
=
self
.
cursor
.
get
()
self
.
cursor
.
step
()
while
item
is
not
None
:
if
self
.
valbytes
:
for
i
in
range
(
0
,
len
(
item
[
1
]),
self
.
valbytes
):
yield
self
.
_from_bytes
(
item
[
0
]),
self
.
_from_bytes
(
item
[
1
][
i
:
i
+
self
.
valbytes
])
else
:
yield
self
.
_from_bytes
(
item
[
0
]),
item
[
1
]
item
=
self
.
cursor
.
get
()
self
.
cursor
.
step
()
...
...
@@ -97,7 +117,7 @@ class database:
if
__name__
==
"
__main__
"
:
db
=
database
(
"
test
"
,
8
)
db
=
database
(
"
test
"
,
8
,
8
)
db
.
put
(
1
,
5
)
db
.
put
(
1
,
6
)
db
.
put
(
2
,
6
)
...
...
@@ -113,5 +133,14 @@ if __name__=="__main__":
print
(
"
get_range 4 6
"
,
list
(
db
.
get_range
(
4
,
6
)))
print
(
"
get_range 3 3
"
,
list
(
db
.
get_range
(
3
,
3
)))
print
(
"
get_range 6 6
"
,
list
(
db
.
get_range
(
6
,
6
)))
print
(
"
get_new_key
"
,
db
.
get_new_key
())
db
.
dump
()
db
.
drop
()
db
=
database
(
"
test
"
,
8
)
db
.
put
(
1
,
"
asdf
"
)
print
(
"
get 1
"
,
db
.
get
(
1
))
print
(
"
get_range_key 1 3
"
,
db
.
get_range_key
(
1
,
3
))
print
(
"
get_range 0 2
"
,
list
(
db
.
get_range
(
0
,
2
)))
db
.
dump
()
db
.
drop
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment