Forum Discussion

xbxalex's avatar
xbxalex
Reel Rookie
6 years ago

My advanced functionality

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

 

 

 

1 Reply

  • String splitting:

    function str_split(str, del)
    
        strlen = len(str)
        dellen = len(del)
        i = 0
        offset = 0
        chain = []
        while lt(offset, strlen)
            if ne(0, i) and eq(del, substr(str, offset + i, dellen)) or eq(offset + i, strlen) then
                chain.push( substr(str, offset, offset + i - offset) )
                offset = offset + i + dellen
                i = 0
            else
                i = i + 1
            endif
        endwhile
    
        return chain
    end function