added some array iteration code
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:
49
hawk.go
49
hawk.go
@ -103,8 +103,15 @@ const (
|
|||||||
VAL_BOB ValType = C.HAWK_VAL_BOB
|
VAL_BOB ValType = C.HAWK_VAL_BOB
|
||||||
)
|
)
|
||||||
|
|
||||||
type BitMask C.hawk_bitmask_t
|
type ValArrayItr struct {
|
||||||
|
c C.hawk_val_arr_itr_t
|
||||||
|
}
|
||||||
|
|
||||||
|
type ValMapItr struct {
|
||||||
|
c *C.hawk_val_map_itr_t
|
||||||
|
}
|
||||||
|
|
||||||
|
type BitMask C.hawk_bitmask_t
|
||||||
|
|
||||||
func deregister_instance(h *Hawk) {
|
func deregister_instance(h *Hawk) {
|
||||||
fmt.Printf ("DEREGISER INSTANCE %p\n", h)
|
fmt.Printf ("DEREGISER INSTANCE %p\n", h)
|
||||||
@ -647,19 +654,27 @@ func (val *Val) ArrayField(index int) (*Val, error) {
|
|||||||
return val.rtx.make_val(func() *C.hawk_val_t { return v })
|
return val.rtx.make_val(func() *C.hawk_val_t { return v })
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
func (val *Val) ArrayFirstField(itr *ValArrayItr) *Val {
|
||||||
func (val *Val) ArrayFirstField() *Val {
|
var i *C.hawk_val_arr_itr_t
|
||||||
var v *C.hawk_val_t
|
var v *Val
|
||||||
var itr C.hawk_val_arr_itr_t
|
var err error
|
||||||
v = C.hawk_rtx_getfirstarrvalitr(val.rtx.c, val.c, &itr)
|
i = C.hawk_rtx_getfirstarrvalitr(val.rtx.c, val.c, &itr.c)
|
||||||
if v == nil { return nil, val.rtx.make_errinfo() }
|
if i == nil { return nil }
|
||||||
return val.rtx.make_val(func() *C.hawk_val_t { return v })
|
v, err = val.rtx.make_val(func() *C.hawk_val_t { return itr.c.elem })
|
||||||
|
if err != nil { return nil }
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
func (val *Val) ArrayNextField(itr ValArrItr) *Val {
|
func (val *Val) ArrayNextField(itr *ValArrayItr) *Val {
|
||||||
|
var i *C.hawk_val_arr_itr_t
|
||||||
|
var v *Val
|
||||||
|
var err error
|
||||||
|
i = C.hawk_rtx_getnextarrvalitr(val.rtx.c, val.c, &itr.c)
|
||||||
|
if i == nil { return nil }
|
||||||
|
v, err = val.rtx.make_val(func() *C.hawk_val_t { return itr.c.elem })
|
||||||
|
if err != nil { return nil }
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
func (val *Val) MapField(key string) (*Val, error) {
|
func (val *Val) MapField(key string) (*Val, error) {
|
||||||
var v *C.hawk_val_t
|
var v *C.hawk_val_t
|
||||||
@ -678,6 +693,12 @@ func (val *Val) MapField(key string) (*Val, error) {
|
|||||||
//func (val *Val) SetMapField(key string, val *Val) error {
|
//func (val *Val) SetMapField(key string, val *Val) error {
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
func (val *Val) String() string {
|
||||||
|
var s string
|
||||||
|
s, _ = val.ToStr()
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------
|
// -----------------------------------------------------------
|
||||||
|
|
||||||
var val_type []string = []string{
|
var val_type []string = []string{
|
||||||
@ -702,6 +723,12 @@ func (t ValType) String() string {
|
|||||||
|
|
||||||
// -----------------------------------------------------------
|
// -----------------------------------------------------------
|
||||||
|
|
||||||
|
func (itr *ValArrayItr) Index() int {
|
||||||
|
return int(itr.c.itr.idx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------
|
||||||
|
|
||||||
func ucstr_to_rune_slice(str *C.hawk_uch_t) []rune {
|
func ucstr_to_rune_slice(str *C.hawk_uch_t) []rune {
|
||||||
return uchars_to_rune_slice(str, uintptr(C.hawk_count_ucstr(str)))
|
return uchars_to_rune_slice(str, uintptr(C.hawk_count_ucstr(str)))
|
||||||
}
|
}
|
||||||
|
|||||||
14
hawk_test.go
14
hawk_test.go
@ -132,7 +132,8 @@ return x
|
|||||||
}
|
}
|
||||||
function get_arr(s) {
|
function get_arr(s) {
|
||||||
@local x;
|
@local x;
|
||||||
x = hawk::array(s, (s %% s), 10, 20.99);
|
x = hawk::array(s, (s %% s), 10, 20.99, "what the");
|
||||||
|
delete(x[3]);
|
||||||
for (i in x) print i, x[i];
|
for (i in x) print i, x[i];
|
||||||
return x;
|
return x;
|
||||||
}`)
|
}`)
|
||||||
@ -193,17 +194,26 @@ return x;
|
|||||||
if f.Type() != hawk.VAL_STR {
|
if f.Type() != hawk.VAL_STR {
|
||||||
t.Errorf("the value at the hello field must be a string. but it was %s", f.Type().String())
|
t.Errorf("the value at the hello field must be a string. but it was %s", f.Type().String())
|
||||||
} else {
|
} else {
|
||||||
var i int
|
//var i int
|
||||||
var sv string
|
var sv string
|
||||||
|
var ff *hawk.Val
|
||||||
|
var itr hawk.ValArrayItr
|
||||||
|
|
||||||
sv = hawk.Must(f.ToStr())
|
sv = hawk.Must(f.ToStr())
|
||||||
if sv != "hawk flieshawk flies" {
|
if sv != "hawk flieshawk flies" {
|
||||||
t.Errorf("the value for the hello field must be 'hawk flieshawk flies'. but it was %s", sv)
|
t.Errorf("the value for the hello field must be 'hawk flieshawk flies'. but it was %s", sv)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
for i = 1; i <= sz; i++ {
|
for i = 1; i <= sz; i++ {
|
||||||
fmt.Printf("%d %v\n", i, hawk.Must(v.ArrayField(i)))
|
fmt.Printf("%d %v\n", i, hawk.Must(v.ArrayField(i)))
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
ff = v.ArrayFirstField(&itr)
|
||||||
|
for ff != nil {
|
||||||
|
fmt.Printf("%d [%v]\n", itr.Index(), ff.String())
|
||||||
|
ff = v.ArrayNextField(&itr)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -412,7 +412,7 @@ typedef struct hawk_val_arr_itr_t hawk_val_arr_itr_t;
|
|||||||
struct hawk_val_arr_itr_t
|
struct hawk_val_arr_itr_t
|
||||||
{
|
{
|
||||||
hawk_arr_itr_t itr;
|
hawk_arr_itr_t itr;
|
||||||
hawk_ptl_t elem;
|
hawk_val_t* elem;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------ */
|
||||||
|
|||||||
@ -1458,7 +1458,7 @@ hawk_val_arr_itr_t* hawk_rtx_getfirstarrvalitr (hawk_rtx_t* rtx, hawk_val_t* arr
|
|||||||
HAWK_ASSERT(HAWK_RTX_GETVALTYPE(rtx, arr) == HAWK_VAL_ARR);
|
HAWK_ASSERT(HAWK_RTX_GETVALTYPE(rtx, arr) == HAWK_VAL_ARR);
|
||||||
ptl = hawk_arr_getfirstelem(((hawk_val_arr_t*)arr)->arr, &itr->itr);
|
ptl = hawk_arr_getfirstelem(((hawk_val_arr_t*)arr)->arr, &itr->itr);
|
||||||
if (!ptl) return HAWK_NULL;
|
if (!ptl) return HAWK_NULL;
|
||||||
itr->elem = *ptl;
|
itr->elem = ptl->ptr;
|
||||||
return itr;
|
return itr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1468,7 +1468,7 @@ hawk_val_arr_itr_t* hawk_rtx_getnextarrvalitr (hawk_rtx_t* rtx, hawk_val_t* arr,
|
|||||||
HAWK_ASSERT(HAWK_RTX_GETVALTYPE(rtx, arr) == HAWK_VAL_ARR);
|
HAWK_ASSERT(HAWK_RTX_GETVALTYPE(rtx, arr) == HAWK_VAL_ARR);
|
||||||
ptl = hawk_arr_getnextelem(((hawk_val_arr_t*)arr)->arr, &itr->itr);
|
ptl = hawk_arr_getnextelem(((hawk_val_arr_t*)arr)->arr, &itr->itr);
|
||||||
if (!ptl) return HAWK_NULL;
|
if (!ptl) return HAWK_NULL;
|
||||||
itr->elem = *ptl;
|
itr->elem = ptl->ptr;
|
||||||
return itr;
|
return itr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user