示例#1
0
void HistoryScrollBuffer::addCellsVector(const QVector<Character>& cells)
{
    _head++;
    if ( _usedLines < _maxLineCount )
        _usedLines++;

    if ( _head >= _maxLineCount )
    {
        _head = 0;
    }

    _historyBuffer[bufferIndex(_usedLines-1)] = cells;
    _wrappedLine[bufferIndex(_usedLines-1)] = false;
}
示例#2
0
bool HistoryScrollBuffer::isWrappedLine(int lineNumber)
{
  Q_ASSERT( lineNumber >= 0 && lineNumber < _maxLineCount );

  if (lineNumber < _usedLines)
  {
    //kDebug() << "Line" << lineNumber << "wrapped is" << _wrappedLine[bufferIndex(lineNumber)];
    return _wrappedLine[bufferIndex(lineNumber)];
  }
  else
    return false;
}
示例#3
0
int HistoryScrollBuffer::getLineLen(int lineNumber)
{
  Q_ASSERT( lineNumber >= 0 && lineNumber < _maxLineCount );

  if ( lineNumber < _usedLines )
  {
    return _historyBuffer[bufferIndex(lineNumber)].size();
  }
  else
  {
    return 0;
  }
}
示例#4
0
void IndexPage::loadPage(BufferManager* manager) {
	Buffer* buffer = manager->getBuffer(bufferIndex());
	buffer->seek(bufferPos());

	__int32 bsize = buffer->readInt();
	char* data = buffer->readChars();

	MemoryStream* helperStream = new MemoryStream(data, bsize);
	helperStream->seek(0);

	helperStream->readInt(); // BUCKET_MAX_ELEMENTS

	size = helperStream->readInt();

	IndexPage* tempPointer = NULL;
	for (int x = 0; x < BUCKET_MAX_ELEMENTS; x++) {
		Index* index = retrieveIndexElement(helperStream);
		elements[x] = index;

		tempPointer = retrievePointer(helperStream);
		pointers[x] = tempPointer;
		if (tempPointer != NULL) {
			tempPointer->parentElement = this;
		}
	}	

	// Recovers the last pointer
	tempPointer = retrievePointer(helperStream);
	pointers[BUCKET_MAX_ELEMENTS] = tempPointer;
	if (tempPointer != NULL) {
		tempPointer->parentElement = this;
	}

	// Recovers siblings 
	leftSibling = retrievePointer(helperStream);
	rightSibling = retrievePointer(helperStream);
	setLoaded(true);

	/* 
		for (int x = 0; x <= BUCKET_MAX_ELEMENTS; x++) {
		IndexPage* temp = page->pointers[x];
		if ((temp != NULL) && (temp->bufferIndex() > -1)) {
		loadPage(temp);
		}
		}
		*/
	delete helperStream;
}
示例#5
0
void HistoryScrollBuffer::setMaxNbLines(unsigned int lineCount)
{
    HistoryLine* oldBuffer = _historyBuffer;
    HistoryLine* newBuffer = new HistoryLine[lineCount];

    for ( int i = 0 ; i < qMin(_usedLines,(int)lineCount) ; i++ )
    {
        newBuffer[i] = oldBuffer[bufferIndex(i)];
    }

    _usedLines = qMin(_usedLines,(int)lineCount);
    _maxLineCount = lineCount;
    _head = ( _usedLines == _maxLineCount ) ? 0 : _usedLines-1;

    _historyBuffer = newBuffer;
    delete[] oldBuffer;

    _wrappedLine.resize(lineCount);
}
示例#6
0
void HistoryScrollBuffer::getCells(int lineNumber, int startColumn, int count, Character* buffer)
{
  if ( count == 0 ) return;

  Q_ASSERT( lineNumber < _maxLineCount );

  if (lineNumber >= _usedLines)
  {
    memset(buffer, 0, count * sizeof(Character));
    return;
  }

  const HistoryLine& line = _historyBuffer[bufferIndex(lineNumber)];

  //kDebug() << "startCol " << startColumn;
  //kDebug() << "line.size() " << line.size();
  //kDebug() << "count " << count;

  Q_ASSERT( startColumn <= line.size() - count );

  memcpy(buffer, line.constData() + startColumn , count * sizeof(Character));
}
示例#7
0
void HistoryScrollBuffer::addLine(bool previousWrapped)
{
    _wrappedLine[bufferIndex(_usedLines-1)] = previousWrapped;
}