added hawk_rtx_getarrvaltally().
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Val methods being worked on
This commit is contained in:
93
hawk.go
93
hawk.go
@@ -86,8 +86,26 @@ type Val struct {
|
||||
prev *Val
|
||||
}
|
||||
|
||||
type ValType int
|
||||
const (
|
||||
VAL_NIL ValType = C.HAWK_VAL_NIL
|
||||
VAL_CHAR ValType = C.HAWK_VAL_CHAR
|
||||
VAL_BCHR ValType = C.HAWK_VAL_BCHR
|
||||
VAL_INT ValType = C.HAWK_VAL_INT
|
||||
VAL_FLT ValType = C.HAWK_VAL_FLT
|
||||
VAL_STR ValType = C.HAWK_VAL_STR
|
||||
VAL_MBS ValType = C.HAWK_VAL_MBS
|
||||
VAL_FUN ValType = C.HAWK_VAL_FUN
|
||||
VAL_MAP ValType = C.HAWK_VAL_MAP
|
||||
VAL_ARR ValType = C.HAWK_VAL_ARR
|
||||
VAL_REX ValType = C.HAWK_VAL_REX
|
||||
VAL_REF ValType = C.HAWK_VAL_REF
|
||||
VAL_BOB ValType = C.HAWK_VAL_BOB
|
||||
)
|
||||
|
||||
type BitMask C.hawk_bitmask_t
|
||||
|
||||
|
||||
func deregister_instance(h *Hawk) {
|
||||
fmt.Printf ("DEREGISER INSTANCE %p\n", h)
|
||||
for h.rtx_head != nil {
|
||||
@@ -269,6 +287,7 @@ func (hawk *Hawk) chain_rtx(rtx *Rtx) {
|
||||
rtx.next = nil
|
||||
hawk.rtx_tail = rtx
|
||||
hawk.rtx_count++
|
||||
fmt.Printf(">>>> %d\n", hawk.rtx_count)
|
||||
hawk.rtx_mtx.Unlock()
|
||||
}
|
||||
|
||||
@@ -291,6 +310,7 @@ fmt.Printf("head %p tail %p\n", hawk.rtx_tail, hawk.rtx_tail)
|
||||
rtx.next = nil
|
||||
rtx.prev = nil
|
||||
hawk.rtx_count--
|
||||
fmt.Printf(">>>> %d\n", hawk.rtx_count)
|
||||
hawk.rtx_mtx.Unlock()
|
||||
}
|
||||
|
||||
@@ -546,13 +566,19 @@ func (val *Val) Close() {
|
||||
}
|
||||
}
|
||||
|
||||
/*func (val* Val) ToByte() (byte, error) {
|
||||
func (val *Val) Type() ValType {
|
||||
var x C.int
|
||||
x = C.hawk_rtx_getvaltype(val.rtx.c, val.c)
|
||||
return ValType(x)
|
||||
}
|
||||
|
||||
func (val* Val) ToRune() (rune, error) {
|
||||
/*func (val *Val) ToByte() (byte, error) {
|
||||
}
|
||||
|
||||
func (val *Val) ToRune() (rune, error) {
|
||||
}*/
|
||||
|
||||
func (val* Val) ToInt() (int, error) {
|
||||
func (val *Val) ToInt() (int, error) {
|
||||
var v C.hawk_int_t
|
||||
var x C.int
|
||||
|
||||
@@ -562,7 +588,7 @@ func (val* Val) ToInt() (int, error) {
|
||||
return int(v), nil
|
||||
}
|
||||
|
||||
func (val* Val) ToFlt() (float64, error) {
|
||||
func (val *Val) ToFlt() (float64, error) {
|
||||
var v float64
|
||||
var x C.int
|
||||
|
||||
@@ -573,7 +599,7 @@ func (val* Val) ToFlt() (float64, error) {
|
||||
return v, nil
|
||||
}
|
||||
|
||||
func (val* Val) ToStr() (string, error) {
|
||||
func (val *Val) ToStr() (string, error) {
|
||||
var out C.hawk_rtx_valtostr_out_t
|
||||
var ptr *C.hawk_ooch_t
|
||||
var len C.hawk_oow_t
|
||||
@@ -591,7 +617,7 @@ func (val* Val) ToStr() (string, error) {
|
||||
return v, nil
|
||||
}
|
||||
|
||||
func (val* Val) ToByteArr() ([]byte, error) {
|
||||
func (val *Val) ToByteArr() ([]byte, error) {
|
||||
var ptr *C.hawk_bch_t
|
||||
var len C.hawk_oow_t
|
||||
var v []byte
|
||||
@@ -605,6 +631,61 @@ func (val* Val) ToByteArr() ([]byte, error) {
|
||||
return v, nil
|
||||
}
|
||||
|
||||
func (val *Val) ArrayTally() int {
|
||||
var v C.hawk_ooi_t
|
||||
// TODO: if not array .. panic or return -1 or 0?
|
||||
v = C.hawk_rtx_getarrvaltally(val.rtx.c, val.c)
|
||||
return int(v)
|
||||
}
|
||||
|
||||
// TODO: function get the first index and last index or the capacity
|
||||
// function to traverse?
|
||||
func (val *Val) ArrayField(index int) (*Val, error) {
|
||||
var v *C.hawk_val_t
|
||||
v = C.hawk_rtx_getarrvalfld(val.rtx.c, val.c, C.hawk_ooi_t(index))
|
||||
if v == nil { return nil, val.rtx.make_errinfo() }
|
||||
return val.rtx.make_val(func() *C.hawk_val_t { return v })
|
||||
}
|
||||
|
||||
func (val *Val) MapField(key string) (*Val, error) {
|
||||
var v *C.hawk_val_t
|
||||
var uc []C.hawk_uch_t
|
||||
uc = string_to_uchars(key)
|
||||
v = C.hawk_rtx_getmapvalfld(val.rtx.c, val.c, &uc[0], C.hawk_oow_t(len(uc)))
|
||||
if v == nil { return nil, val.rtx.make_errinfo() }
|
||||
return val.rtx.make_val(func() *C.hawk_val_t { return v })
|
||||
}
|
||||
|
||||
//func (val *Val) SetArrayField(index int, val *Val) error {
|
||||
//
|
||||
//}
|
||||
|
||||
// TODO: map traversal..
|
||||
//func (val *Val) SetMapField(key string, val *Val) error {
|
||||
//}
|
||||
|
||||
// -----------------------------------------------------------
|
||||
|
||||
var val_type []string = []string{
|
||||
VAL_NIL: "NIL",
|
||||
VAL_CHAR: "CHAR",
|
||||
VAL_BCHR: "BCHR",
|
||||
VAL_INT: "INT",
|
||||
VAL_FLT: "FLT",
|
||||
VAL_STR: "STR",
|
||||
VAL_MBS: "MBS",
|
||||
VAL_FUN: "FUN",
|
||||
VAL_MAP: "MAP",
|
||||
VAL_ARR: "ARR",
|
||||
VAL_REX: "REX",
|
||||
VAL_REF: "REF",
|
||||
VAL_BOB: "BOB",
|
||||
}
|
||||
|
||||
func (t ValType) String() string {
|
||||
return val_type[t]
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------
|
||||
|
||||
func ucstr_to_rune_slice(str *C.hawk_uch_t) []rune {
|
||||
|
||||
Reference in New Issue
Block a user