Цитата(Dog Pawlowa @ Oct 8 2008, 16:12)

Небольшая модификация предложенного
Dog Pawlowa.
Исходная ситуация: код команды - 1 байт, всего используемых команд около - 40.
Решение: массив указателей на функции-обработчики для каждой возможной команды (длина массива 256). Для "нереализованных" команд просто вызывается функция-заглушка. Т.е. то, что предложил Dog Pawlowa
Наш
Всевышний и Генеральный решил, что отныне код команды будет 2 байта, при этом, естественно, не все команды будут реализованы.
Прикинул я сколько займет теперь массив указателей, и понял что "это ж весь мой рост", в смысле память. Теперь делаю так:
Код
index = binary_search(state, StateArr);
FunctionArr[index]();
Массив
StateArr, естественно, отсортирован (у меня по возрастанию). Когда юзвер добавляет очередную команду, то добаляем в массив
StateArr очередной "идентификатор команды", а в
FunctionArr адрес обработчика этой команды. После чего сортируем массив
StateArr, при этом синхронно тасуется и массив
FunctionArr. Процедура добавления новой команды некритична ко времени.
На данный момент максимально возможное количество команд пользователя 2048. Проверяли худший случай, работает шустро.
Замечание: когда команд немного (10-20), то быстрее оказался простой линейный просмотр массива
StateArr, чем
binary_search.