- 1
- 2
- 3
- 4
- 5
- 6
private void executeUiOperation(final UiOperation operation, final Boolean documentReadOnly) {
boolean readOnly = !edit;
if (documentReadOnly != null) {
readOnly |= documentReadOnly;
}
//....
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+75
private void executeUiOperation(final UiOperation operation, final Boolean documentReadOnly) {
boolean readOnly = !edit;
if (documentReadOnly != null) {
readOnly |= documentReadOnly;
}
//....
Кручу-верчу запутать хочу...
Джавапроблемы ;)
Убиться, и правда, в GCC и MSVC sizeof(bool) == 1.
Сколько живу и не знаю...
все зависит от компилятора
Однобайтовость же при размещении в памяти скажется только положительно - за счет меньшего размера структур с таким булом будет меньше промахов при обращениях к кешу.
В данном случае b соснет. Обращение к нему будет не выравненным и может печально закончится. Так что однобафтовый bull плохо. В любом случае это медленнее.
И раз тут применили #pragma pack, то был вполне определенный протокол, в котором было написано 1 байт того-то и 4 байта сего-то. Поэтому все претензии не к однобайтовому булу, а к автору протокола.
P.S. Не надоело еще грызть кактусы и реализовывать сериализацию накладыванием структур? Ну я понимаю в embedded это актуально, и, возможно, в движках СУБД где надо быстро сохранять\загружать данные в непереносимом на другие машины формате (но там #pragma pack можно с чистой совестью выкинуть).
Логикой это было никак не объяснить.
А суть была вот в чем - false=0, а вот true= -1.
Бейсиковский Byte был unsigned, то есть 0..255. Потому использовался 2-байтный Integer, в который можно было записать -1.
Вот такое вот говно.
ну логично, ~ 0 == -1