updating more value manipulation code for the go wrapper
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
95
hawk.go
95
hawk.go
@@ -450,6 +450,8 @@ func (rtx *Rtx) NewVal(v interface{}) (*Val, error) {
|
||||
switch _type.Kind() {
|
||||
case reflect.Int:
|
||||
return rtx.NewValFromInt(v.(int))
|
||||
case reflect.Float32:
|
||||
return rtx.NewValFromFlt(float64(v.(float32)))
|
||||
case reflect.Float64:
|
||||
return rtx.NewValFromFlt(v.(float64))
|
||||
case reflect.String:
|
||||
@@ -470,12 +472,11 @@ func (rtx *Rtx) NewVal(v interface{}) (*Val, error) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func (rtx *Rtx) NewValFromInt(v int) (*Val, error) {
|
||||
func (rtx* Rtx) make_val(vmaker func() *C.hawk_val_t) (*Val, error) {
|
||||
var c *C.hawk_val_t
|
||||
var vv *Val
|
||||
|
||||
c = C.hawk_rtx_makeintval(rtx.c, C.hawk_int_t(v))
|
||||
c = vmaker()
|
||||
if c == nil { return nil, rtx.make_errinfo() }
|
||||
|
||||
C.hawk_rtx_refupval(rtx.c, c)
|
||||
@@ -484,43 +485,58 @@ func (rtx *Rtx) NewValFromInt(v int) (*Val, error) {
|
||||
return vv, nil
|
||||
}
|
||||
|
||||
func (rtx *Rtx) NewValFromByte(v byte) (*Val, error) {
|
||||
return rtx.make_val(func() *C.hawk_val_t {
|
||||
return C.hawk_rtx_makebchrval(rtx.c, C.hawk_bch_t(v))
|
||||
})
|
||||
}
|
||||
|
||||
func (rtx *Rtx) NewValFromRune(v rune) (*Val, error) {
|
||||
return rtx.make_val(func() *C.hawk_val_t {
|
||||
return C.hawk_rtx_makecharval(rtx.c, C.hawk_ooch_t(v))
|
||||
})
|
||||
}
|
||||
|
||||
func (rtx *Rtx) NewValFromInt(v int) (*Val, error) {
|
||||
return rtx.make_val(func() *C.hawk_val_t {
|
||||
return C.hawk_rtx_makeintval(rtx.c, C.hawk_int_t(v))
|
||||
})
|
||||
}
|
||||
|
||||
func (rtx *Rtx) NewValFromFlt(v float64) (*Val, error) {
|
||||
var c *C.hawk_val_t
|
||||
var vv *Val
|
||||
|
||||
c = C.make_flt_val(rtx.c, C.double(v))
|
||||
if c == nil { return nil, rtx.make_errinfo() }
|
||||
|
||||
C.hawk_rtx_refupval(rtx.c, c)
|
||||
vv = &Val{rtx: rtx, c: c}
|
||||
rtx.chain_val(vv)
|
||||
return vv, nil
|
||||
return rtx.make_val(func() *C.hawk_val_t {
|
||||
return C.make_flt_val(rtx.c, C.double(v))
|
||||
})
|
||||
}
|
||||
|
||||
func (rtx *Rtx) NewValFromStr(v string) (*Val, error) {
|
||||
var c *C.hawk_val_t
|
||||
var vv *Val
|
||||
|
||||
c = C.hawk_rtx_makestrvalwithbchars(rtx.c, C.CString(v), C.hawk_oow_t(len(v)))
|
||||
if c == nil { return nil, rtx.make_errinfo() }
|
||||
|
||||
C.hawk_rtx_refupval(rtx.c, c)
|
||||
vv = &Val{rtx: rtx, c: c}
|
||||
rtx.chain_val(vv)
|
||||
return vv, nil
|
||||
return rtx.make_val(func() *C.hawk_val_t {
|
||||
return C.hawk_rtx_makestrvalwithbchars(rtx.c, C.CString(v), C.hawk_oow_t(len(v)))
|
||||
})
|
||||
}
|
||||
|
||||
func (rtx *Rtx) NewValFromByteArr(v []byte) (*Val, error) {
|
||||
var c *C.hawk_val_t
|
||||
var vv *Val
|
||||
return rtx.make_val(func() *C.hawk_val_t {
|
||||
return C.hawk_rtx_makembsvalwithbchars(rtx.c, (*C.hawk_bch_t)(unsafe.Pointer(&v[0])), C.hawk_oow_t(len(v)))
|
||||
})
|
||||
}
|
||||
|
||||
c = C.hawk_rtx_makembsvalwithbchars(rtx.c, (*C.hawk_bch_t)(unsafe.Pointer(&v[0])), C.hawk_oow_t(len(v)))
|
||||
if c == nil { return nil, rtx.make_errinfo() }
|
||||
func (rtx *Rtx) NewBobVal(v []byte) (*Val, error) {
|
||||
return rtx.make_val(func() *C.hawk_val_t {
|
||||
return C.hawk_rtx_makebobval(rtx.c, unsafe.Pointer(&v[0]), C.hawk_oow_t(len(v)))
|
||||
})
|
||||
}
|
||||
|
||||
C.hawk_rtx_refupval(rtx.c, c)
|
||||
vv = &Val{rtx: rtx, c: c}
|
||||
rtx.chain_val(vv)
|
||||
return vv, nil
|
||||
func (rtx *Rtx) NewMapVal() (*Val, error) {
|
||||
return rtx.make_val(func() *C.hawk_val_t {
|
||||
return C.hawk_rtx_makemapval(rtx.c)
|
||||
})
|
||||
}
|
||||
|
||||
func (rtx *Rtx) NewArrVal(init_capa int) (*Val, error) {
|
||||
return rtx.make_val(func() *C.hawk_val_t {
|
||||
return C.hawk_rtx_makearrval(rtx.c, C.hawk_ooi_t(init_capa))
|
||||
})
|
||||
}
|
||||
|
||||
func (val *Val) Close() {
|
||||
@@ -530,6 +546,12 @@ func (val *Val) Close() {
|
||||
}
|
||||
}
|
||||
|
||||
/*func (val* Val) ToByte() (byte, error) {
|
||||
}
|
||||
|
||||
func (val* Val) ToRune() (rune, error) {
|
||||
}*/
|
||||
|
||||
func (val* Val) ToInt() (int, error) {
|
||||
var v C.hawk_int_t
|
||||
var x C.int
|
||||
@@ -570,6 +592,17 @@ func (val* Val) ToStr() (string, error) {
|
||||
}
|
||||
|
||||
func (val* Val) ToByteArr() ([]byte, error) {
|
||||
var ptr *C.hawk_bch_t
|
||||
var len C.hawk_oow_t
|
||||
var v []byte
|
||||
|
||||
ptr = C.hawk_rtx_valtobcstrdupwithcmgr(val.rtx.c, val.c, &len, C.hawk_rtx_getcmgr(val.rtx.c))
|
||||
if ptr == nil { return nil, val.rtx.make_errinfo() }
|
||||
|
||||
v = C.GoBytes(unsafe.Pointer(ptr), C.int(len))
|
||||
C.hawk_rtx_freemem(val.rtx.c, unsafe.Pointer(ptr))
|
||||
|
||||
return v, nil
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user