Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
mpa
libs
pucrio-tecgraf
Commits
bc06e813
Commit
bc06e813
authored
May 21, 2021
by
Bernardo Quaresma Dias
Browse files
Inclusão de lógicas para tratamento de estado paralelo
INSTMPA-1284
parent
57ad6f0d
Changes
1
Hide whitespace changes
Inline
Side-by-side
lib-state-1_2.mpam
View file @
bc06e813
include 'lib-access-1_0.mpam'
include 'lib-utils-1_1.mpam'
class{ id = "state_base", name = "Estado Básico", group = "Gerenciamento de Estado",
bases = {},
...
...
@@ -16,6 +17,14 @@ class{ id = "state_base", name = "Estado B
end
end
end
function _CLASS:getlabelmap()
local labelmap = self._label_map --[[ASSERT]] assert(labelmap, string.format("%s: Sem rótulos definidos.", tostring(self)) )
local mode = self.cfg_label_mode or 'seq'
local bitwise = (mode == 'par')
return labelmap, bitwise
end
]===],
attributes = {
{ id = "ind_state", name = "Estado", type = "INTEGER_POINT", access = "rw",
...
...
@@ -25,12 +34,21 @@ class{ id = "state_base", name = "Estado B
description = [[
Valor inicial para estado.
Se não for configurado, será usado o valor -1.
Se não for configurado, será usado o valor -1
exceto para o modo 'par' de rótulos
.
]],
},
{ id = "l_labels", name = "Rótulos de Estado", type = "STRING[]", access = "",
description = [[Lista de rótulos de estados.]],
},
{ id = "cfg_label_mode", name = "Modo de Rótulos de Estado", type = "STRING", access = "",
description = [[
Configuração de Modo de rótulos de estado.
Essa configuração pode ser:
'seq' - os estados são sequenciais e só podem ser alcançados individualmente; (padrão)
'par' - os estados são paralelos e só podem ser alcançados ao mesmo tempo.
]],
},
},
methods = {
{ id = "get", name = "Obter",
...
...
@@ -75,22 +93,94 @@ class{ id = "state_base", name = "Estado B
results = {
},
code = [===[ function(self)
local init_val = self.cfg_init_val or -1
self:set(init_val)
local reset_val = self.cfg_init_val
if not reset_val then
if self.cfg_label_mode == 'par' then
reset_val = 0
else
reset_val = -1
end
end
self:set(reset_val)
end ]===],
},
{ id = "set_label", name = "Definir Rótulo",
description = [[Ajusta o estado correspondente ao valor do rótulo.]],
parameters = {
{ name = "Rótulo", type = "STRING"}
{ name = "Rótulo", type = "STRING"}
,
},
results = {
},
code = [===[ function(self, label)
local label_map = self._label_map --[[ASSERT]] assert(label_map, "%s: Sem rótulos definidos.", tostring(self))
local label_map, bitwise = self:getlabelmap()
local idx = label_map[label]
self:set(idx)
local newstate
if bitwise then
local state = self:get()
newstate = setbit(state, bit(idx, 1))
else
newstate = idx
end
self:set(newstate)
end ]===],
},
{ id = "reset_label", name = "Apagar Rótulo",
description = [[
Apaga o valor do estado para o valor inicial.
Se um rótulo for informado, apaga de acrodo com a configuração
de modo de rótulos da seguinte forma:
- se o modo for 'seq', apaga apenas se o rótulo indicado for correspondento ao estado atual,
- se o modo for 'par', apaga o apenas o rótulo indicado.
]],
parameters = {
{ name = "Rótulo", type = "STRING"},
},
results = {
},
code = [===[ function(self, label)
if label then
local label_map, bitwise = self:getlabelmap()
local idx = label_map[label]
local state = self:get()
if bitwise then
local reset_val = clearbit(state, bit(idx, 1))
self:set(reset_val)
elseif state == idx then
self:reset()
end
end
end ]===],
},
{ id = "check_label", name = "Avaliar Rótulo",
description = [[Avaliar s eo estado correspondente ao rótulo está ativo.]],
parameters = {
{ name = "Rótulo", type = "STRING"},
},
results = {
{ name = "Ativo", type = "BOOLEAN"},
},
code = [===[ function(self, label)
local label_map, bitwise = self:getlabelmap()
local idx = label_map[label]
local ret
local state = self:get()
if bitwise then
ret = hasbit(state, bit(idx, 1))
else
ret = state == idx
end
return ret
end ]===],
},
},
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment