Netspirit писал(а):
Но есть ещё секция констант "только для чтения" в исполняемом файлеДа понятно все. Твой пример убедителен, хотя и не удивил аж нисколько.
Netspirit писал(а):
Но в кодогенераторе стоит костыльЕго не так просто убрать... Мне это тоже не нравилось, но в то время я не решался так глубоко лезть в наши системные файлы.
Да и не все я решал.
Во-первых, принудительное добавление нулика в хвост - это один из способов уговорить Delphi что это таки строка а не символ, для односимвольной строки.
Во-вторых, если текст длиннее 255 символов, то Delphi огорчается, и не хочет компилировать. В этом случае таковая строка помещается в соответствующую секцию ресурса, откуда возвращается только как PChar. Т.е, опять облом с нулевым символом.
Надо, видимо, помещать в ресурс также, как и Stream, с соответствующим извлечением (а это функции из share). И найти таки вариант записи для односимвольной строки.
Ну не смогла я В то время...
В общем, не все так просто.
Netspirit писал(а):
"F" для приватных полей классаДа запросто
Замена Mask на SetMask добавила 12 символов код. Замена intMask на FMask - вернет обратно 10
Netspirit писал(а):
Скажем, я бы предпочелА вот смотри сюда:
function _StrCmp(Str, Msk: PChar): Boolean;
begin
while (Str^ <> #0) and (Msk^ <> #0) do
begin
if Msk^ = '*' then
begin //Statement-1
Result := _StrCmp(Str, Msk + 1);
if Result then Exit;
end
else if Msk^ = '#' then
begin //Statement-2
if Str^ in ['0'..'9'] then Inc(Msk)
else Break;
end
else if (Msk^ = '?') or (Msk^ = Str^) then
//Statement-3
Inc(Msk)
else
//Statement-4
Break;
Inc(Str);
end;
while Msk^ = '*' do Inc(Msk);
Result := (Str^ = #0) and (Msk^ = #0);
end;
И у меня все Statement-ы имеют одинаковый отступ.
А у тебя каждый последующий все глубже и глубже. Ну хорошо, что их всего 4... А если бы 20 ???
Вот это я и называю "лесенкой", особого семантического смысла не имеющего.
Такая комбинация ELSEIF-ов (если их записать раздельно, как else if - смысл-то от этого не меняется) - это же просто как супер-навороченный CASE.
Нас же не оскорбляет, что все его ветки на одном уровне отступа. Почему же здесь мы должны обижаться...
Netspirit, я не спорю, у тебя все канонически правильно. Просто пойми, что в мой подход тоже системен и логичен.
Вот и все.
Хм... А есть еще особо тонкие ценители отступов. Так они еще на один отступ смещают BEGIN-END, а то, что внутри - тоже на один (как у тебя).
Не, ну действительно, почему это последний BREAK с отступом, а первый BEGIN - нет... Чем это он хуже BREAK-а
Вот я не хочу спорить с этим народом, и располагаю этот BEGIN на другой строке.
Но это все так... Размышления о прекрасном. Не более того.
Да, вот. Netspirit, ты ничего не сказал про мой код из предыдущего поста. Функционально эквивалентный, как мне пока кажется, тому, что мы обсуждаем.
Там, между прочим, нет ELSEIF-ов
Вместо одного EXIT-а и двух BREAK-ов -- два EXIT-а. Что уже легче.
Да и BREAK-и были нацелены на то, что в результате некой оконечной суеты таки произойдет выход с обязательным FALSE.
Теперь тот же выход, но без суеты.
А то придет nesco после праздника, и строго спросит: так на чем же вы все-таки договорились ???
Я его знаю