組み込みMCU上で動作するluaにvt100(oldschool端末)を実装しています。パフォーマンスはここで問題になります。文字列の文字列を正確に検索し、最初の一致を返します
Givenは、いくつかの(予測できない数)文字を含む文字列(入力行)です。 この文字列では、一連の文字のうち最初の一致を探したいと思います。例えば
:私の例では
-- ASCII value(hex) of keyboard keys.
#define KEY_UP "\x41"
#define KEY_DOWN "\x42"
#define KEY_RIGHT "\x43"
#define KEY_LEFT "\x44"
-- terminal object is defined and created
function terminal:receive()
-- Set buffer and shorthand to self.port.read
local read = function() return self.port:read() end
local received = ""
while true do
-- Read Input
local line = read()
if (not line) then break end
received = received .. line
-- Search for the key.
-- Don't search in line, due different baudrates might not
-- Get the entire digit at once.
if (received:find(KEY_UP)) then
return KEY_UP
elseif (received:find(KEY_DOWN)) then
return KEY_DOWN
... and so on
end
end
end
ソリューションは確実に、一種の遅いです。よりパフォーマンスの高いソリューションを考え出すのはそれほど難しいことではありません。しかし、これに対して最も効果的な解決策は何ですか?
プロファイラーは使用しましたか?パターンマッチングの部分がパフォーマンスのボトルネックになっていますか? –
おそらくそうではありませんが、それは別の質問です。 – Sempie
私は最初の一見でマッチングを心配しています、私は40個のキーのようなものを探しているからです。一致が最初のキーの1つであれば、それは確かに静かであり、受信プロセスがボトルネックになる可能性があります。しかし、一致がなければ、2つ以上のダニを取るfind()が40回あります。 – Sempie