Changed DataValue interface

Renamed `ArrayElements() []DataValue` method of DataNode interface to `Array() []DataValue`
Added `ArrayElements() iter.Seq[DataValue]` iterator to DataNode interface
This commit is contained in:
Alexei Anoshenko 2025-07-03 17:15:43 +03:00
parent 86f3f4c731
commit 4c76000254
6 changed files with 29 additions and 8 deletions

View File

@ -5,6 +5,10 @@
* Added CreatePopupFromResources, CreatePopupFromText, and CreatePopupFromObject functions
* Added implementation of Properties interface to Popup
* Changed ParseDataText function return values
* Added `Properties() iter.Seq[DataNode]` iterator to DataObject interface
* Renamed `ArrayElements() []DataValue` method of DataNode interface to `Array() []DataValue`
* Added `ArrayElements() iter.Seq[DataValue]` iterator to DataNode interface
# v0.19.0

View File

@ -541,7 +541,7 @@ func animationSet(properties Properties, tag PropertyName, value any) []Property
case ArrayNode:
props := []AnimatedProperty{}
for _, val := range value.ArrayElements() {
for val := range value.ArrayElements() {
if val.IsObject() {
if prop, ok := parseObject(val.Object()); ok {
props = append(props, prop)

25
data.go
View File

@ -93,7 +93,10 @@ type DataNode interface {
ArrayElement(index int) DataValue
// ArrayElements returns an array of objects if that node is an array
ArrayElements() []DataValue
Array() []DataValue
// ArrayElements returns an iterator to access the array elements of objects if that node is an array
ArrayElements() iter.Seq[DataValue]
// ArrayAsParams returns an array of a params(map) if that node is an array
ArrayAsParams() []Params
@ -340,11 +343,25 @@ func (node *dataNode) ArrayElement(index int) DataValue {
return nil
}
func (node *dataNode) ArrayElements() []DataValue {
func (node *dataNode) Array() []DataValue {
if node.array != nil {
return node.array
return slices.Clone(node.array)
}
return []DataValue{node.value}
}
func (node *dataNode) ArrayElements() iter.Seq[DataValue] {
return func(yield func(DataValue) bool) {
if node.array != nil {
for _, element := range node.array {
if !yield(element) {
return
}
}
} else {
yield(node.value)
}
}
return []DataValue{}
}
func (node *dataNode) ArrayAsParams() []Params {

View File

@ -127,7 +127,7 @@ func parseProperties(properties Properties, object DataObject) {
properties.Set(PropertyName(node.Tag()), node.Object())
case ArrayNode:
properties.Set(PropertyName(node.Tag()), node.ArrayElements())
properties.Set(PropertyName(node.Tag()), node.Array())
}
}
}

View File

@ -658,7 +658,7 @@ func (session *sessionData) handleRootSize(data DataObject) {
func (session *sessionData) handleResize(data DataObject) {
if node := data.PropertyByTag("views"); node != nil && node.Type() == ArrayNode {
for _, el := range node.ArrayElements() {
for el := range node.ArrayElements() {
if el.IsObject() {
obj := el.Object()
getFloat := func(tag string) float64 {

View File

@ -699,7 +699,7 @@ func (theme *theme) addText(themeText string) bool {
for node := range obj.Properties() {
switch node.Type() {
case ArrayNode:
params[PropertyName(node.Tag())] = node.ArrayElements()
params[PropertyName(node.Tag())] = node.Array()
case ObjectNode:
params[PropertyName(node.Tag())] = node.Object()