aboutsummaryrefslogtreecommitdiff
path: root/stream.go
diff options
context:
space:
mode:
authorDeterminant <ted.sybil@gmail.com>2019-06-22 01:45:37 -0400
committerDeterminant <ted.sybil@gmail.com>2019-06-22 01:45:37 -0400
commit66914cd88bd822d3399e754f43a42906c043f1fd (patch)
tree77751cf4f2b106cb8fe2dd66f546502a7a099217 /stream.go
parent988748a02d39228017e36f7a5c3415b19b31657d (diff)
support TLS; change some API
Diffstat (limited to 'stream.go')
-rw-r--r--stream.go53
1 files changed, 47 insertions, 6 deletions
diff --git a/stream.go b/stream.go
index c35933e..bbc7680 100644
--- a/stream.go
+++ b/stream.go
@@ -30,6 +30,14 @@ func NewByteArrayMovedFromDataStream(src DataStream) ByteArray {
return res
}
+func NewByteArrayFromHex(hex string) ByteArray {
+ c_str := C.CString(hex)
+ res := &byteArray{ inner: C.bytearray_new_from_hex(c_str) }
+ C.free(rawptr_t(c_str))
+ runtime.SetFinalizer(res, func(self ByteArray) { self.free() })
+ return res
+}
+
// The C pointer to a DataStream object.
type CDataStream = *C.datastream_t
type dataStream struct {
@@ -47,11 +55,17 @@ func DataStreamFromC(ptr CDataStream) DataStream {
}
}
+func dataStreamSetFinalizer(res DataStream) DataStream {
+ if res != nil {
+ runtime.SetFinalizer(res, func(self DataStream) { self.free() })
+ }
+ return res
+}
+
// Create an empty DataStream.
func NewDataStream() DataStream {
res := DataStreamFromC(C.datastream_new())
- runtime.SetFinalizer(res, func(self DataStream) { self.free() })
- return res
+ return dataStreamSetFinalizer(res)
}
// Create a DataStream with data copied from bytes.
@@ -63,7 +77,20 @@ func NewDataStreamFromBytes(bytes []byte) (res DataStream) {
} else {
res = DataStreamFromC(C.datastream_new())
}
- runtime.SetFinalizer(res, func(self DataStream) { self.free() })
+ return dataStreamSetFinalizer(res)
+}
+
+// Create a DataStream with content moved from a ByteArray.
+func NewDataStreamMovedFromByteArray(bytes ByteArray) (res DataStream) {
+ res = DataStreamFromC(C.datastream_new_moved_from_bytearray(bytes.inner))
+ dataStreamSetFinalizer(res)
+ return
+}
+
+// Create a DataStream with content copied from a ByteArray.
+func NewDataStreamFromByteArray(bytes ByteArray) (res DataStream) {
+ res = DataStreamFromC(C.datastream_new_from_bytearray(bytes.inner))
+ dataStreamSetFinalizer(res)
return
}
@@ -75,8 +102,7 @@ func (self DataStream) detach(ptr rawptr_t) { delete(self.attached, uintptr(ptr)
// Make a copy of the object.
func (self DataStream) Copy() DataStream {
res := DataStreamFromC(C.datastream_copy(self.inner))
- runtime.SetFinalizer(res, func(self DataStream) { self.free() })
- return res
+ return dataStreamSetFinalizer(res)
}
// TODO: datastream_data
@@ -166,7 +192,17 @@ type UInt256 = *uint256
// Create a 256-bit integer.
func NewUInt256() UInt256 {
res := &uint256{ inner: C.uint256_new() }
- runtime.SetFinalizer(res, func(self UInt256) { self.free() })
+ if res != nil {
+ runtime.SetFinalizer(res, func(self UInt256) { self.free() })
+ }
+ return res
+}
+
+func NewUInt256FromByteArray(bytes ByteArray) UInt256 {
+ res := &uint256{ inner: C.uint256_new_from_bytearray(bytes.inner) }
+ if res != nil {
+ runtime.SetFinalizer(res, func(self UInt256) { self.free() })
+ }
return res
}
@@ -191,6 +227,11 @@ func (self DataStream) GetHash() UInt256 {
return res
}
+// Get the Sha256 hash of the given ByteArray content.
+func (self ByteArray) GetHash() UInt256 {
+ return NewDataStreamFromByteArray(self).GetHash()
+}
+
// Get hexadicemal string representation of the given DataStream content
// (without consuming the stream).
func (self DataStream) GetHex() string {