История изменений
Исправление bormant, (текущая версия) :
Но по логике исполнения избавиться от abs() нельзя из-за:
void KateBuffer::addIndentBasedFoldingInformation(TQMemArray<uint> &foldingList,bool addindent,uint deindent)
{
//...
for (uint z= foldingList.size()-(deindent*2); z < foldingList.size(); z=z+2)
{
foldingList[z] = -1; // беззнаковая (-1)
foldingList[z+1] = 0;
}
}
}
Поэтому в TDE поменяли вызов на labs( ... ):
https://mirror.git.trinitydesktop.org/cgit/tdelibs/tree/kate/part/katebuffer....
Однако тем самым внесли ошибку. С labs() изменилась логика: беззнаковый аргумент расширяется до знакового большей разрядности, становится (-1)u. А первоначальная логика расчитана на потерю «знаковости», на то, что после abs() аргумент (-1)u == 0xffffffff станет равен 1, а не 0xffffffff.
Поэтому скажем дружное «фи» товарищу Slávek Banko за такое «исправление» (компилируется, но не работает как задумано):
https://mirror.git.trinitydesktop.org/cgit/tdelibs/commit/kate/part/katebuffe...
#include <iostream>
int main()
{
unsigned int i=-1;
std::cout << "before: " << abs(i) << " after: " << labs(i) << "\n";
}
before: 1 after: 4294967295
То есть исправлять-то нужно было на
while ( (foldingList.size()>0) && ( abs((int)foldingList[foldingList.size()-2])==1)) {
Исправление bormant, :
Но по логике исполнения избавиться от abs() нельзя из-за:
void KateBuffer::addIndentBasedFoldingInformation(TQMemArray<uint> &foldingList,bool addindent,uint deindent)
{
//...
for (uint z= foldingList.size()-(deindent*2); z < foldingList.size(); z=z+2)
{
foldingList[z] = -1; // беззнаковая (-1)
foldingList[z+1] = 0;
}
}
}
Поэтому в TDE поменяли вызов на labs( ... ):
https://mirror.git.trinitydesktop.org/cgit/tdelibs/tree/kate/part/katebuffer....
Однако тем самым внесли ошибку. С labs() изменилась логика: беззнаковый аргумент расширяется до знакового большей разрядности, становится (-1)u. А первоначальная логика расчитана на потерю «знаковости», на то, что после abs() аргумент (-1)u == 0xffffffff станет равен 1, а не 0xffffffff.
Поэтому скажем дружное «фи» товарищу Slávek Banko за такое «исправление» (компилируется, но не работает как задумано):
https://mirror.git.trinitydesktop.org/cgit/tdelibs/commit/kate/part/katebuffe...
#include <iostream>
int main()
{
unsigned int i=-1;
std::cout << "before: " << abs(i) << " after: " << labs(i) << "\n";
}
before: 1 after: 4294967295
Исправление bormant, :
Но по логике исполнения избавиться от abs() нельзя из-за:
void KateBuffer::addIndentBasedFoldingInformation(TQMemArray<uint> &foldingList,bool addindent,uint deindent)
{
//...
for (uint z= foldingList.size()-(deindent*2); z < foldingList.size(); z=z+2)
{
foldingList[z] = -1; // беззнаковая (-1)
foldingList[z+1] = 0;
}
}
}
Поэтому в TDE поменяли вызов на labs( ... ):
https://mirror.git.trinitydesktop.org/cgit/tdelibs/tree/kate/part/katebuffer....
Однако тем самым внесли ошибку. С labs() изменилась логика: беззнаковый аргумент расширяется до знакового большей разрядности, становится (-1)u. А первоначальная логика расчитана на потерю «знаковости», на то, что после abs() аргумент (-1)u == 0xffffffff станет равен 1, а не 0xffffffff.
Поэтому скажем дружное «фи» товарищу Slávek Banko за такое «исправление» (компилируется, но не работает как задумано):
https://mirror.git.trinitydesktop.org/cgit/tdelibs/commit/kate/part/katebuffe...
Исправление bormant, :
Но по логике исполнения избавиться от abs() нельзя из-за:
void KateBuffer::addIndentBasedFoldingInformation(TQMemArray<uint> &foldingList,bool addindent,uint deindent)
{
//...
for (uint z= foldingList.size()-(deindent*2); z < foldingList.size(); z=z+2)
{
foldingList[z] = -1; // беззнаковая (-1)
foldingList[z+1] = 0;
}
}
}
Поэтому в TDE поменяли вызов на labs( ... ):
https://mirror.git.trinitydesktop.org/cgit/tdelibs/tree/kate/part/katebuffer....
Однако тем самым внесли ошибку. С labs() изменилась логика: беззнаковый аргумент расширяется до знакового большей разрядности, становится (-1)u. А первоначальная логика расчитана на потерю «знаковости», на то, что после abs() аргумент (-1)u == 0xffffffff станет равен 1, а не 0xffffffff.
Поэтому скажем дружное «фи» товарищу Slávek Banko за такое «исправление»:
https://mirror.git.trinitydesktop.org/cgit/tdelibs/commit/kate/part/katebuffe...
Исходная версия bormant, :
Но по логике исполнения избавиться от abs() нельзя из-за:
void KateBuffer::addIndentBasedFoldingInformation(TQMemArray<uint> &foldingList,bool addindent,uint deindent)
{
//...
for (uint z= foldingList.size()-(deindent*2); z < foldingList.size(); z=z+2)
{
foldingList[z] = -1; // беззнаковая (-1)
foldingList[z+1] = 0;
}
}
}
Поэтому в TDE поменяли вызов на labs( ... ).