Hello, i’m bad speak english, sorry. In my thread is instended on expand roku functionality.
Logical
function eq(a, b) as Boolean
return a = b
end function
function ne(a, b) as Boolean
return a <> b
end function
function ge(a, b) as Boolean
return a >= b
end function
function gt(a, b) as Boolean
return a > b
end function
function le(a, b) as Boolean
return a <= b
end function
function lt(a, b) as Boolean
return a < b
end function
Typecast
function instanceof(a, b as String)
return type(a) = b
end function
function is_invalid(a) as Boolean
return eq(a, invalid) or instanceof(a, "roInvalid")
end function
function is_valid(a)
return NOT is_invalid(a)
end function
function is_string(a) as Boolean
return instanceof(a, "String") or instanceof(a, "roString")
end function
function is_int(a) as Boolean
return instanceof(a, "Integer") or instanceof(a, "roInt")
end function
function is_long(a) as Boolean
return instanceof(a, "roLongInteger")
end function rem }}}
function is_float(a) as Boolean
return instanceof(a, "Float") or instanceof(a, "roDouble")
end function rem }}}
function is_bool(a) as Boolean
return instanceof(a, "Boolean") or instanceof(a, "roBoolean")
end function rem }}}
function is_function(a) as Boolean
return instanceof(a, "Function") or instanceof(a, "roFunction")
end function
function is_array(a) as Boolean
return instanceof(a, "roArray")
end function rem }}}
function is_aa(a) as Boolean
return instanceof(a, "roAssociativeArray")
end function
Runtime
function set_timeout(ms, fn) as Integer
messagePort = createObject("roMessagePort")
event = wait(ms, messagePort)
fn()
return 0
end function
Window
function window_get_screen_resolution()
deviceInfo = createObject("roDeviceInfo")
return deviceInfo.getUIResolution().name
end function
function window_get_screen_width()
deviceInfo = createObject("roDeviceInfo")
return deviceInfo.getUIResolution().width
end function
function window_get_screen_height()
deviceInfo = createObject("roDeviceInfo")
return deviceInfo.getUIResolution().height
end function
String functions:
function ucfirst(str as String) : return mid(ucase(str), 1, 1) + mid(lcase(str), 2) : end function
function substr(str as String, start = 0 as Integer, length = invalid)
if is_invalid(length) then return mid(str, start + 1)
return mid(str, start + 1, length)
end function
function strpos(str, needle)
cnt = len(str)
i = 0
while lt(i, cnt)
if eq(needle, substr(str, i, 1)) then return i
i = i + 1
endwhile
return -1
end function
Time functions:
function time()
dt = createObject("roDateTime")
return dt.asSeconds()
endfunction
function usleep(ms)
set_timeout(ms, function() : return 0 : endfunction)
end function
Array utils:
function implode(array as Object, delimiter = "," as String)
result = ""
for i = 0 to ( array.count() - 1 )
value = array[i]
if i = array.count() - 1 then
result = result + value.toStr()
else
result = result + value.toStr() + delimiter
end if
end for
return result
end function
function array_map(array, transform)
result = []
for each el in array
result.push( transform(el) )
end for
return result
end function
function array_reduce(array, initValue, transform)
value = initValue
for each el in array
value = transform(value, el)
end for
return value
end function
function array_filter(array, filter)
result = []
for each el in array
if filter( el ) then value.push(el)
end for
return result
end function
function array_slice(array as Object, startIndex = 0 as Integer, endIndex = 0 as Integer)
result = []
if startIndex < 0 then return slicedArray
if endIndex = 0 then endIndex = array.count()
if endIndex > array.count() then endIndex = array.count()
for i = startIndex to ( endIndex - 1 )
result.push(array[i])
end for
return result
end function
Sourcemaking ![]()
function queue()
return {
'*
'*
'*
tasks: [],
'*
'*
'*
idx: 0,
'*
'*
'*
completeFunc: invalid,
'*
'*
'*
addTask: function(fn) : m.tasks.push(fn) : endfunction,
'*
'*
'*
done: function()
m.idx = m.idx + 1
cnt = m.tasks.count()
if eq(m.idx, cnt) then
if is_valid(m.completeFunc) then
completeFunc = m.completeFunc
completeFunc()
endif
return false
endif
m.tasks[m.idx]()
endfunction
'*
'*
'*
onComplete: function(func) : m.completeFunc = func : endfunction,
start: function() : m.tasks[0]() : endfunction
}
end function
