Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wendelin.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Joshua
wendelin.core
Commits
3c1df9e8
Commit
3c1df9e8
authored
Jul 19, 2018
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
f1b89b31
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
24 deletions
+24
-24
wcfs/btree.go
wcfs/btree.go
+4
-4
wcfs/zblk.go
wcfs/zblk.go
+8
-8
wcfs/zodbpy.go
wcfs/zodbpy.go
+12
-12
No files found.
wcfs/btree.go
View file @
3c1df9e8
...
...
@@ -37,7 +37,7 @@ type KEY int64
// are chained together via 'next', so that the entire BTree contents
// can be traversed in sorted order quickly and easily.
type
ZBucket
struct
{
*
pyObjec
t
*
PyPersisten
t
next
*
ZBucket
// the bucket with the next-larger keys
keys
[]
KEY
// 'len' keys, in increasing order
...
...
@@ -55,7 +55,7 @@ type zBTreeItem struct {
// See https://github.com/zopefoundation/BTrees/blob/4.5.0-1-gc8bf24e/BTrees/Development.txt#L198
// for details.
type
ZBTree
struct
{
*
pyObjec
t
*
PyPersisten
t
// firstbucket points to the bucket containing the smallest key in
// the BTree. This is found by traversing leftmost child pointers
...
...
@@ -249,8 +249,8 @@ func (b *ZBucket) PySetState(pystate interface{}) error {
// ---- register classes to ZODB ----
func
bucketNew
(
pyobj
*
pyObject
)
IPyPersistent
{
return
&
ZBucket
{
pyObjec
t
:
pyobj
}
}
func
btreeNew
(
pyobj
*
pyObject
)
IPyPersistent
{
return
&
ZBTree
{
pyObjec
t
:
pyobj
}
}
func
bucketNew
(
pyobj
*
PyPersistent
)
IPyPersistent
{
return
&
ZBucket
{
PyPersisten
t
:
pyobj
}
}
func
btreeNew
(
pyobj
*
PyPersistent
)
IPyPersistent
{
return
&
ZBTree
{
PyPersisten
t
:
pyobj
}
}
func
init
()
{
registerPyClass
(
"zodb.BTree.LOBucket"
,
bucketNew
)
...
...
wcfs/zblk.go
View file @
3c1df9e8
...
...
@@ -35,7 +35,7 @@ const zwendelin = "wendelin.bigfile.file_zodb"
// ZBlk0 mimics ZBlk0 from python.
type
ZBlk0
struct
{
*
pyObjec
t
*
PyPersisten
t
blkdata
string
}
...
...
@@ -58,7 +58,7 @@ func (zb *ZBlk0) PySetState(pystate interface{}) error {
// ZData mimics ZData from python.
type
ZData
struct
{
*
pyObjec
t
*
PyPersisten
t
data
string
}
...
...
@@ -79,7 +79,7 @@ func (zd *ZData) PySetState(pystate interface{}) error {
// ZBlk1 mimics ZBlk1 from python.
type
ZBlk1
struct
{
*
pyObjec
t
*
PyPersisten
t
chunktab
*
ZBTree
// {} offset -> ZData(chunk)
}
...
...
@@ -103,7 +103,7 @@ func (zb *ZBlk1) PySetState(pystate interface{}) error {
// ZBigFile mimics ZBigFile from python.
type
ZBigFile
struct
{
*
pyObjec
t
*
PyPersisten
t
blksize
int64
blktab
*
ZBTree
// LOBtree{} blk -> ZBlk*(blkdata)
...
...
@@ -147,10 +147,10 @@ func (bf *ZBigFile) PySetState(pystate interface{}) (err error) {
// ----------------------------------------
func
zblk0New
(
base
*
pyObject
)
IPyPersistent
{
return
&
ZBlk0
{
pyObjec
t
:
base
}
}
func
zblk1New
(
base
*
pyObject
)
IPyPersistent
{
return
&
ZBlk1
{
pyObjec
t
:
base
}
}
func
zdataNew
(
base
*
pyObject
)
IPyPersistent
{
return
&
ZData
{
pyObjec
t
:
base
}
}
func
zbigfileNew
(
pyobj
*
pyObject
)
IPyPersistent
{
return
&
ZBigFile
{
pyObjec
t
:
pyobj
}
}
func
zblk0New
(
base
*
PyPersistent
)
IPyPersistent
{
return
&
ZBlk0
{
PyPersisten
t
:
base
}
}
func
zblk1New
(
base
*
PyPersistent
)
IPyPersistent
{
return
&
ZBlk1
{
PyPersisten
t
:
base
}
}
func
zdataNew
(
base
*
PyPersistent
)
IPyPersistent
{
return
&
ZData
{
PyPersisten
t
:
base
}
}
func
zbigfileNew
(
pyobj
*
PyPersistent
)
IPyPersistent
{
return
&
ZBigFile
{
PyPersisten
t
:
pyobj
}
}
func
init
()
{
registerPyClass
(
zwendelin
+
".ZBlk"
,
zblk0New
)
...
...
wcfs/zodbpy.go
View file @
3c1df9e8
...
...
@@ -38,14 +38,14 @@ type IPyPersistent interface {
PyStateful
}
//
pyObjec
t is common base implementation for in-RAM representation of ZODB Python objects.
type
pyObjec
t
struct
{
//
PyPersisten
t is common base implementation for in-RAM representation of ZODB Python objects.
type
PyPersisten
t
struct
{
Persistent
pyclass
pickle
.
Class
}
func
(
pyobj
*
pyObjec
t
)
PyClass
()
pickle
.
Class
{
return
pyobj
.
pyclass
}
//func (pyobj *
pyObjec
t) PyState() interface{} { return pyobj.pystate }
func
(
pyobj
*
PyPersisten
t
)
PyClass
()
pickle
.
Class
{
return
pyobj
.
pyclass
}
//func (pyobj *
PyPersisten
t) PyState() interface{} { return pyobj.pystate }
// PyStateful is the interface describing in-RAM object whose data state can be
// exchanged as Python data.
...
...
@@ -59,17 +59,17 @@ type PyStateful interface {
//PyGetState() interface{} TODO
}
// ----
pyObjec
t <-> Persistent state exchange ----
// ----
PyPersisten
t <-> Persistent state exchange ----
// pyinstance returns .instance upcasted to IPyPersistent.
//
// this should be always safe because we always create pyObjects via
// newGhost which passes IPyPersistent as instance to IPersistent.
func
(
pyobj
*
pyObjec
t
)
pyinstance
()
IPyPersistent
{
func
(
pyobj
*
PyPersisten
t
)
pyinstance
()
IPyPersistent
{
return
pyobj
.
instance
.
(
IPyPersistent
)
}
func
(
pyobj
*
pyObjec
t
)
SetState
(
state
*
mem
.
Buf
)
error
{
func
(
pyobj
*
PyPersisten
t
)
SetState
(
state
*
mem
.
Buf
)
error
{
pyclass
,
pystate
,
err
:=
zodb
.
PyData
(
state
.
Data
)
.
Decode
()
if
err
!=
nil
{
return
err
// XXX err ctx
...
...
@@ -84,12 +84,12 @@ func (pyobj *pyObject) SetState(state *mem.Buf) error {
return
pyobj
.
pyinstance
()
.
PySetState
(
pystate
)
// XXX err ctx = ok?
}
// TODO
pyObjec
t.GetState
// TODO
PyPersisten
t.GetState
// ---- pyclass -> new ghost ----
// function representing new of a class.
type
pyClassNewFunc
func
(
base
*
pyObjec
t
)
IPyPersistent
type
pyClassNewFunc
func
(
base
*
PyPersisten
t
)
IPyPersistent
// path(pyclass) -> new(pyobj)
var
pyClassTab
=
make
(
map
[
string
]
pyClassNewFunc
)
...
...
@@ -105,7 +105,7 @@ func registerPyClass(pyClassPath string, classNew pyClassNewFunc) {
// newGhost creates new ghost object corresponding to pyclass and oid.
func
(
conn
*
Connection
)
newGhost
(
pyclass
pickle
.
Class
,
oid
zodb
.
Oid
)
IPyPersistent
{
pyobj
:=
&
pyObjec
t
{
pyobj
:=
&
PyPersisten
t
{
Persistent
:
Persistent
{
jar
:
conn
,
oid
:
oid
,
serial
:
0
,
state
:
GHOST
},
pyclass
:
pyclass
,
}
...
...
@@ -116,7 +116,7 @@ func (conn *Connection) newGhost(pyclass pickle.Class, oid zodb.Oid) IPyPersiste
if
classNew
!=
nil
{
instance
=
classNew
(
pyobj
)
}
else
{
instance
=
&
dummyPyInstance
{
pyObjec
t
:
pyobj
}
instance
=
&
dummyPyInstance
{
PyPersisten
t
:
pyobj
}
}
pyobj
.
instance
=
instance
...
...
@@ -125,7 +125,7 @@ func (conn *Connection) newGhost(pyclass pickle.Class, oid zodb.Oid) IPyPersiste
// dummyPyInstance is used for python classes that were not registered.
type
dummyPyInstance
struct
{
*
pyObjec
t
*
PyPersisten
t
pystate
interface
{}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment