diff -r 49c70dcc3f17 -r c863538fcbb6 hgcacheproxymodel/tsrc/unit/bmhelper.cpp --- a/hgcacheproxymodel/tsrc/unit/bmhelper.cpp Fri May 14 16:57:01 2010 +0300 +++ b/hgcacheproxymodel/tsrc/unit/bmhelper.cpp Thu May 27 13:59:05 2010 +0300 @@ -13,7 +13,7 @@ * * Description: * -* Version : %version: 1 % +* Version : %version: 5 % */ #include "bmhelper.h" #include @@ -30,10 +30,24 @@ void BMHelper::release(int start, int end) { + if ((start <0 && end <0) || (start >=mBuffer.size() && end >=mBuffer.size() ) ) + return; + if ( start<0) start = 0; - if (end>mBuffer.size() - 1) - end = mBuffer.size() - 1; + if (end>mBuffer.size()) + end = mBuffer.size(); + + if ( start > end){ + int t = start; + start = end; + end = t; + } + + if ( start<0) + start = 0; + if (end>=mBuffer.size()) + end = mBuffer.size()-1; for ( int i = start; i <= end; i++){ if (mBuffer.value(i) == true){ @@ -47,10 +61,25 @@ void BMHelper::request(int start, int end, HgRequestOrder order) { Q_UNUSED(order); + + if ((start <0 && end <0) || (start >=mBuffer.size() && end >=mBuffer.size() ) ) + return; + if ( start<0) start = 0; - if (end>mBuffer.size() - 1) - end = mBuffer.size() - 1; + if (end>=mBuffer.size()) + end = mBuffer.size()-1; + + if ( start > end){ + int t = start; + start = end; + end = t; + } + if ( start<0) + start = 0; + if (end>=mBuffer.size()) + end = mBuffer.size()-1; + for ( int i = start; i <= end; i++){ if (mBuffer.value(i) == false){ @@ -64,40 +93,47 @@ bool BMHelper::isIntergal(int bufferSize) { int c = mBuffer.count(true); - bool res = (bufferSize == c); + bool res = (c == mBuffer.count())||(bufferSize == c); + + if (res){ ///check integrity ( if all items from first true, to size are true; int f = mBuffer.indexOf(true); for ( int i =0; i < mBuffer.count(); i++){ - if (mBuffer[i] != (i>=f && i < f+bufferSize) ){ + if (mBuffer[i] != (i>=f && i < f+c) ){ res = false; break; } } } else { - qWarning()< mBuffer.count()) - aIndex = mBuffer.count()-1; - - if ((mBuffer.count() - aNewTotalCount)>0){ - while (mBuffer.count()!=aNewTotalCount){ - if (aIndex > mBuffer.count() ) - aIndex = mBuffer.count() -1; - mBuffer.removeAt(aIndex); - } - } else if ((mBuffer.count() - aNewTotalCount)<0){ - while (mBuffer.count()!=aNewTotalCount){ - mBuffer.insert(aIndex, false); - } + if ( pos <0 || pos > mBuffer.count()){ + return; } + mBuffer.removeAt(pos); } + +void BMHelper::insert(int pos) +{ + if ( pos <0 || pos > mBuffer.count()){ + return; + } + mBuffer.insert(pos, false); +}