  function(string_split_parts str length)
    address_new()
    ans(first_node)
    
    set(current_node ${first_node})
    while(true)      
      string(LENGTH "${str}" len)       
      if(${len} LESS ${length})
        address_set(${current_node} "${str}")
        set(str)
      else()
        string(SUBSTRING "${str}" 0 "${length}" part)
        string(SUBSTRING "${str}" "${length}" -1 str)
        address_set(${current_node} "${part}")
      endif()
      if(str)
        address_new()
        ans(new_node)
        map_set_hidden(${current_node} next ${new_node})
        set(current_node ${new_node})
      else()
        return_ref(first_node)
      endif()     
      
    endwhile()

  endfunction()