Esempio n. 1
0
SqlitePage::BlockAreas SqlitePage::freeBlocks()
{
    BlockAreas freeBlockAreaList;
    
    CellList cellList = this->cellList(); // FIXIT
    if (cellList.empty()) {
        return freeBlockAreaList;
    }
    
    BlockArea firstBlock;
    PageHeader header = pageHeader();
    // FIXIT: 8 is not good
    firstBlock.begin = header.numOfCells * 2 + 8;
    firstBlock.end = cellList[cellList.size() - 1].offset - 1;
    freeBlockAreaList.push_back(firstBlock);
    
    if (cellList.size() > 1) {
        // Cell List 是自底向上增长的,所以这里使用反向迭代器遍历
        CellList::reverse_iterator rpos;
        for (rpos =  cellList.rbegin();
             rpos != cellList.rend(); ++rpos) {
            BlockArea block;
            block.begin = rpos->offset;
            block.end = rpos->offset + rpos->length;
            CellList::reverse_iterator tmp_rpos = rpos + 1;
            if (block.end < tmp_rpos->offset - kMinFreeBlockSize &&
                block.end < page_.size() - kMinFreeBlockSize) {
                freeBlockAreaList.push_back(block);
            }
        }
    }
    return freeBlockAreaList;
}
void InfoPanel::buildInfoPage(Selection sel,
                              Universe* universe,
                              double tdb)
{
    QString pageText;
    QTextStream stream(&pageText, QIODevice::WriteOnly);

    pageHeader(stream);

    if (sel.body() != NULL)
    {
        buildSolarSystemBodyPage(sel.body(), tdb, stream);
    }
    else if (sel.star() != NULL)
    {
        buildStarPage(sel.star(), universe, tdb, stream);
    }
    else if (sel.deepsky() != NULL)
    {
        buildDSOPage(sel.deepsky(), universe, stream);
    }
    else
    {
        stream << "Error: no object selected!\n";
    }

    pageFooter(stream);

    textBrowser->setHtml(pageText);
}
Esempio n. 3
0
SqlitePage::CellPointers SqlitePage::cellPointers()
{
    CellPointers cellPointers;
    
    base::bytes_it cellPtrsStart = cellPointersOffset();
    
    int offset =  0;
    for (int i = 0; i < pageHeader().numOfCells; ++i)
    {
        base::byte_t* b = &(*(cellPtrsStart + offset));
        uint32_t cellOffset = getValueFromMem<uint32_t>((char *)b, 2);
        cellPointers.push_back(cellOffset);
        offset += 2;
    }
    return cellPointers;
}