Initial commit.
This commit is contained in:
115
vim/autoload/railmoon/id.vim
Executable file
115
vim/autoload/railmoon/id.vim
Executable file
@@ -0,0 +1,115 @@
|
||||
" Author: Mykola Golubyev ( Nickolay Golubev )
|
||||
" Email: golubev.nikolay@gmail.com
|
||||
" Home: www.railmoon.com
|
||||
" Module: railmoon#id
|
||||
" Purpose: util functions for work with id
|
||||
"
|
||||
|
||||
" -
|
||||
" [ public library function ]
|
||||
" Name: railmoon#id#acquire
|
||||
" Purpose: return new unique id for widget
|
||||
" [ parameters ]
|
||||
" pool_name id pool name
|
||||
" -
|
||||
function! railmoon#id#acquire(pool_name)
|
||||
if ! has_key(s:list, a:pool_name)
|
||||
let s:list[a:pool_name] = []
|
||||
endif
|
||||
|
||||
if ! has_key(s:last_id, a:pool_name)
|
||||
let s:last_id[a:pool_name] = 0
|
||||
endif
|
||||
|
||||
if empty(s:list[a:pool_name])
|
||||
let s:last_id[a:pool_name] += 1
|
||||
call add(s:list[a:pool_name], s:last_id[a:pool_name])
|
||||
endif
|
||||
|
||||
let result = s:list[a:pool_name][0]
|
||||
let s:list[a:pool_name] = s:list[a:pool_name][1:]
|
||||
|
||||
call railmoon#trace#debug('id#acquire pool = '.a:pool_name.'; id = '.result)
|
||||
return result
|
||||
endfunction
|
||||
|
||||
" -
|
||||
" [ public library function ]
|
||||
" Name: railmoon#id#release
|
||||
" Purpose: return id to pool
|
||||
" [ parameters ]
|
||||
" pool_name id pool name
|
||||
" id id that no longer in use
|
||||
" -
|
||||
function! railmoon#id#release(pool_name, id)
|
||||
call railmoon#trace#debug('id#release pool = '.a:pool_name.'; id = '.a:id)
|
||||
if index(s:list[a:pool_name], a:id) != -1
|
||||
throw 'railmoon:id:release:already_present:'.a:id
|
||||
endif
|
||||
|
||||
if a:id > s:last_id[a:pool_name]
|
||||
throw 'railmoon:id:release:wasnt_acquired'
|
||||
endif
|
||||
call add(s:list[a:pool_name], a:id)
|
||||
endfunction
|
||||
|
||||
" -
|
||||
" [ internal usage ]
|
||||
" store last widget id
|
||||
" -
|
||||
let s:last_id = {}
|
||||
|
||||
" -
|
||||
" [ internal usage ]
|
||||
" store available ids
|
||||
" -
|
||||
let s:list = {}
|
||||
|
||||
" -
|
||||
" Section: unit testing
|
||||
" -
|
||||
let s:library_unit_test = railmoon#unit_test#create('railmoon#id test')
|
||||
|
||||
function! s:library_unit_test.test_acquire_release()
|
||||
call self.assert_equal(railmoon#id#acquire('test_id_pool'), 1)
|
||||
call self.assert_equal(railmoon#id#acquire('test_id_pool'), 2)
|
||||
call self.assert_equal(railmoon#id#acquire('test_id_pool'), 3)
|
||||
|
||||
call self.assert_equal(railmoon#id#acquire('test2_id_pool'), 1)
|
||||
call self.assert_equal(railmoon#id#acquire('test2_id_pool'), 2)
|
||||
call self.assert_equal(railmoon#id#acquire('test2_id_pool'), 3)
|
||||
|
||||
call railmoon#id#release('test_id_pool', 3)
|
||||
call self.assert_equal(railmoon#id#acquire('test_id_pool'), 3)
|
||||
|
||||
call railmoon#id#release('test2_id_pool', 3)
|
||||
call self.assert_equal(railmoon#id#acquire('test2_id_pool'), 3)
|
||||
|
||||
call railmoon#id#release('test_id_pool', 2)
|
||||
call self.assert_equal(railmoon#id#acquire('test_id_pool'), 2)
|
||||
|
||||
call railmoon#id#release('test_id_pool', 1)
|
||||
call self.assert_equal(railmoon#id#acquire('test_id_pool'), 1)
|
||||
|
||||
call self.assert_equal(railmoon#id#acquire('test_id_pool'), 4)
|
||||
call self.assert_equal(railmoon#id#acquire('test_id_pool'), 5)
|
||||
call self.assert_equal(railmoon#id#acquire('test_id_pool'), 6)
|
||||
|
||||
call railmoon#id#release('test_id_pool', 1)
|
||||
call self.assert_equal(railmoon#id#acquire('test_id_pool'), 1)
|
||||
|
||||
call railmoon#id#release('test_id_pool', 1)
|
||||
call railmoon#id#release('test_id_pool', 2)
|
||||
call railmoon#id#release('test_id_pool', 3)
|
||||
call railmoon#id#release('test_id_pool', 4)
|
||||
call railmoon#id#release('test_id_pool', 5)
|
||||
call railmoon#id#release('test_id_pool', 6)
|
||||
endfunction
|
||||
|
||||
function! s:library_unit_test.test_acquire_release_case_1()
|
||||
call self.assert_equal(railmoon#id#acquire('test_acquire_release_case_1'), 1)
|
||||
call railmoon#id#release('test_acquire_release_case_1', 1)
|
||||
endfunction
|
||||
|
||||
call s:library_unit_test.run()
|
||||
|
||||
Reference in New Issue
Block a user