updating more value manipulation code for the go wrapper
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-11-01 13:29:49 +09:00
parent 7d02ad249a
commit 2fb423df1a
6 changed files with 176 additions and 36 deletions

95
hawk.go
View File

@ -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
}
// -----------------------------------------------------------