Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2013, 21:32   #1
hak3dPunk
 
Регистрация: 17.11.2010
Сообщений: 4
Сообщение Ветвления, свитчи-кейсы

Всем ПРОграммистам привет!
Я долго искал в интернете, может плохо, может не так задавал вопрос, но увы, ответа не нашел.
Вопрос в следующем, сервер принимает пакеты и обрабатывает их, но IFать и SWITCHать 30-40 с немалым пакетов, мягко говоря, не удобно. Какой может быть выход? Приминение паттерна "стратегия" не нашел, т.е. как были ифы/свитчи так и остались, просто обработка пакетов усложнилась и отдалилась.
Какие есть варианты?
hak3dPunk вне форума Ответить с цитированием
Старый 24.08.2013, 22:41   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Можно постараться использовать механизм наследования.
Ведь каждый case является "конкретной" реализацией "общей" концепции решения задачи.
Igor95 вне форума Ответить с цитированием
Старый 24.08.2013, 22:44   #3
Кащей
Форумчанин
 
Аватар для Кащей
 
Регистрация: 09.07.2013
Сообщений: 249
По умолчанию

Цитата:
но увы, ответа не нашел
Так может быть таких вариантов какие ты хочеш, но не можеш описать и нет в природе?
do not use your brain
Кащей вне форума Ответить с цитированием
Старый 24.08.2013, 23:02   #4
hak3dPunk
 
Регистрация: 17.11.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Можно постараться использовать механизм наследования.
Ведь каждый case является "конкретной" реализацией "общей" концепции решения задачи.
К сожалению, конкретно 33 пакета общие, а затем они передаются на обработку на уровень дальше. Т.е. грубо говоря определяется к какому типу относится пакет, а потом он уже разбирается и тп
hak3dPunk вне форума Ответить с цитированием
Старый 24.08.2013, 23:13   #5
asmprog
Пользователь
 
Регистрация: 10.08.2013
Сообщений: 67
По умолчанию

а логически разбить на составляющие? вроде: выставлен флаг F1 - отправляем пакет на корм ф-ции/методу parseF1packet(отсеяли треть - хорошо), в parseF1packet проверяем флаг F2 - отправляем ф-ции parseF1F2packet и т.д.

если для пакетов можно вычленить сигнатуру - можно хоть примитивный CRC16 брать от сигнатуры, а потом через фабрику классов(хотя там тоже switch, но будет хоть как-то интеллигентней)...
asmprog вне форума Ответить с цитированием
Старый 24.08.2013, 23:14   #6
hak3dPunk
 
Регистрация: 17.11.2010
Сообщений: 4
По умолчанию

вся фишка как раз в том, что логически они уже все собраны.
Я надеялся что есть какой-то другой вариант, но от jmz видимо не уйти никуда
Спасибо за мысли и помощь!
hak3dPunk вне форума Ответить с цитированием
Старый 25.08.2013, 00:44   #7
asmprog
Пользователь
 
Регистрация: 10.08.2013
Сообщений: 67
По умолчанию

Цитата:
Сообщение от hak3dPunk Посмотреть сообщение
вся фишка как раз в том, что логически они уже все собраны.
Я надеялся что есть какой-то другой вариант, но от jmz видимо не уйти никуда
Спасибо за мысли и помощь!
варианты есть - если хочется поизвращаться, вопрос - зачем? можно дойти хоть до массива указателей на ф-ции:

(*funcarr[pckt.type])(&pckt);
asmprog вне форума Ответить с цитированием
Старый 25.08.2013, 00:56   #8
Кащей
Форумчанин
 
Аватар для Кащей
 
Регистрация: 09.07.2013
Сообщений: 249
По умолчанию

Цитата:
дойти хоть до массива указателей на ф-ции
Прикольно, а я постеснялся это предлагать.
do not use your brain
Кащей вне форума Ответить с цитированием
Старый 25.08.2013, 01:06   #9
asmprog
Пользователь
 
Регистрация: 10.08.2013
Сообщений: 67
По умолчанию

и чего стесняться, если человек хочет уйти от cmp/jmpz,ja,jbe,jle?
asmprog вне форума Ответить с цитированием
Старый 25.08.2013, 01:29   #10
Кащей
Форумчанин
 
Аватар для Кащей
 
Регистрация: 09.07.2013
Сообщений: 249
По умолчанию

Цитата:
и чего стесняться, если человек хочет уйти от cmp/jmpz,ja,jbe,jle?
выгоды мало, сложностей много. и я хз что ето за буквосочетания которые преследуют автора темы.
do not use your brain
Кащей вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ветвления AK55 Паскаль, Turbo Pascal, PascalABC.NET 4 06.05.2013 19:03
скрипт и веселые тест кейсы Dimsssss SQL, базы данных 1 04.02.2013 23:00
Ветвления Евгений2508 Помощь студентам 0 15.10.2012 12:22
Ветвления Евгений2508 Помощь студентам 0 14.10.2012 09:54
Ветвления Евгений2508 Помощь студентам 1 14.10.2012 09:50