- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
std::string loc =
( {
const char *str = "";
switch (location) {
case Net::HANDSHAKE_TIMEOUT:
str = _(" due to handshake timeout");
break;
case Net::RECV_HANDSHAKE:
str = _(" while waiting for handshake");
break;
case Net::HANDSHAKE_DATA:
str = _(" due to unsupported handshake data");
break;
case Net::HANDSHAKE_AUTH:
str = _(" while parsing handshake data");
break;
case Net::WAIT_DEVICE:
str = _(" while waiting for device");
break;
case Net::TRANSFER_DATA:
str = _(" while transferring data");
break;
}
str;
});
bormand 28.08.2012 13:00 # 0
http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
TarasB 28.08.2012 13:03 # +6
LispGovno 28.08.2012 13:16 # −3
TarasB 28.08.2012 14:24 # 0
absolut 28.08.2012 15:14 # 0
guest 28.08.2012 15:14 # +3
absolut 28.08.2012 14:20 # 0
TheCalligrapher 29.08.2012 23:23 # +2
gvy 30.08.2012 09:32 # 0
const char* get_error(Net::EErrorLocation location)
{
const char *str = "";
switch (location) {
case Net::HANDSHAKE_TIMEOUT:
str = _(" due to handshake timeout");
break;
case Net::RECV_HANDSHAKE:
str = _(" while waiting for handshake");
break;
case Net::HANDSHAKE_DATA:
str = _(" due to unsupported handshake data");
break;
case Net::HANDSHAKE_AUTH:
str = _(" while parsing handshake data");
break;
case Net::WAIT_DEVICE:
str = _(" while waiting for device");
break;
case Net::TRANSFER_DATA:
str = _(" while transferring data");
break;
}
return str;
}
std::string loc = get_error(location);
LispGovno 30.08.2012 09:45 # 0
bormand 30.08.2012 10:11 # +1
А я бы все-таки вот так переписал (если мапа/массив не подходит):
LispGovno 30.08.2012 11:06 # 0
1) Линейный поиск. Например в std::vector. O(n)
2) std::map. O(log n)
3) std::unordered_map. O(1)
4) boost::flat_map/Loki::AssocVector. O(log n)
5) Таблица. О(1)
6) ...
?
От каких критериев отталкиваетесь при выборе?
bormand 30.08.2012 12:29 # +1
> От каких критериев отталкиваетесь при выборе?
Составляешь список основных операций, которые будут выполняться, пытаешься оценить насколько часто они будут использоваться. На основе этих рассуждений можно выбрать наиболее удобную структуру.
Если есть возможность, имхо, стоит инкапсулировать выбранную структуру данных внутри какого-нибудь более-менее высокоуровневого модуля\класса (игровое поле, фабрика объектов и т.п.), дабы если потом возникнет желание заменить ее на другую, не пришлось перелопачивать код в зависимых модулях\классах.
gvy 30.08.2012 11:36 # 0
Массив не подходит, коды не идут подряд. map тем более не нужен для такого маленького числа вариантов, он будет работать медленнее, чем этот switch.
bormand 30.08.2012 11:52 # 0
Я не из-за производительности переписал бы, она тут всяко будет одинаковая, да и не сильно она важна в обработчиках ошибок.
Я переписал бы чисто из-за удобства - с return выходит меньше кода, меньше возможности накосячить, легче читать.
>Массив не подходит, коды не идут подряд. map тем более не нужен для такого маленького числа вариантов, он будет работать медленнее, чем этот switch.
Ну собственно поэтому и написал "если мапа/массив не подходит".
LispGovno 30.08.2012 12:58 # +2
Я видел проекты, где система тормозила именно из-за обработчиков ошибок, а именно из-за постоянного падения исключений "до низа стека".
bormand 30.08.2012 13:35 # 0
Тоже с подобным проектом встречался... несложный скриптовый двиг, но автор не знал про TryStrToFloat, и юзал вместо него StrToFloat. Причем вызывалась эта гадость на каждый чих - на каждом операторе '+', чтобы выяснить типы аргументов. Вот там замена try { StrToFloat() } на TryStrToFloat() подняла производительность на порядок ;)
Но в нормальных ситуациях, когда все идет по плану, исключение это все-таки исключительная ситуация. Поэтому их оптимизация почти всегда преждевременная.
LispGovno 30.08.2012 15:31 # 0
or
Data.Maybe
or
type?
or
Nullable
Но таки TryStrToFloat это не осилил
bormand 30.08.2012 15:41 # 0
LispGovno 30.08.2012 15:50 # 0
LispGovno 30.08.2012 15:53 # 0
float?
или
Nullable<float>
вернуть из TryStrToFloat не осилили.
bormand 30.08.2012 17:05 # 0
LispGovno 30.08.2012 17:08 # +1