arraymember.ps1

class ArrayMember : IRemote {
    [string]$prefix
    [Object]$parent
    
    ArrayMember (
        [int]$index, [string]$prefix, [Object]$parent
    ) : base ($index, $parent.remote) {
        $this.prefix = $prefix
        $this.parent = $parent
    }
    
    [string] identifier () {
        $parentId = $this.parent.identifier()
        return "{0}.{1}[{2}]" -f $parentId, $this.prefix, $this.index
    }
    
    [void] Set ($val) {
        $this.Setter('', $val)
    }
}

class BoolArrayMember : ArrayMember {
    BoolArrayMember (
        [int]$index, [string]$prefix, [Object]$parent
    ) : base ($index, $prefix, $parent) {}
    
    [bool] Get () {
        return $this.Getter('')
    }
}

class IntArrayMember : ArrayMember {
    IntArrayMember (
        [int]$index, [string]$prefix, [Object]$parent
    ) : base ($index, $prefix, $parent) {}
    
    [int] Get () {
        return $this.Getter('')
    }
}

class FloatArrayMember : ArrayMember {
    [int]$decimals
    
    FloatArrayMember (
        [int]$index, [string]$prefix, [Object]$parent, [int]$decimals
    ) : base ($index, $prefix, $parent) {
        $this.decimals = $decimals
    }

    FloatArrayMember (
        [int]$index, [string]$prefix, [Object]$parent
    ) : base ($index, $prefix, $parent) {
        $this.decimals = 2
    }
    
    [double] Get () {
        return [math]::Round($this.Getter(''), $this.decimals)
    }
}

class StringArrayMember : ArrayMember {
    StringArrayMember (
        [int]$index, [string]$prefix, [Object]$parent
    ) : base ($index, $prefix, $parent) {}
    
    [string] Get () {
        return $this.Getter_String('')
    }
}