int PageDirectory::nextRecordPageID(FileHandle &fh, int pageid){ int pgentry = -1; if (pageid == 0) while (1) { if (get_pgnum() != 0) return get_pgid(0); if (get_next() == 0) return -1; moveToNext(fh); } if((pgentry = locateRecordPage(fh, pageid)) == -1) return -1; if (pgentry < get_pgnum() - 1) return get_pgid(pgentry + 1); while (get_next() != 0) { moveToNext(fh); if (get_pgnum() != 0) return get_pgid(0); } return -1; }
int PageDirectory::firstPageWithFreelen(FileHandle& fh, int len){ while(1){ int num = get_pgnum(); for (int i = 0; i < num; i++) if (get_pgfreelen(i) > len) return get_pgid(i); if(get_next() == 0) return -1; moveToNext(fh); } return -1; }
int PageDirectory::allocRecordPage(FileHandle &fh){ int allocated = -1; while (get_pgnum() == PageDirectory::MaximunEntryNum() && get_next() != 0) moveToNext(fh); char newrp[PAGE_SIZE], newpd_buffer[PAGE_SIZE]; memset(newrp, 0, sizeof(newrp)); //all zeros is ok memset(newpd_buffer, 0, sizeof(newpd_buffer)); //all zeros is ok RecordPage rp(newrp); fh.appendPage(newrp); allocated = (int) (fh.getNumberOfPages() - 1); if (get_next() == 0 && get_pgnum() == PageDirectory::MaximunEntryNum()) { fh.appendPage(newpd_buffer); set_next(fh.getNumberOfPages() - 1); moveToNext(fh); } set_pgid(get_pgnum(), allocated); set_pgfreelen(get_pgnum(), rp.getFreelen()); set_pgnum(get_pgnum() + 1); return allocated; }
void imprimeDicionario(Dicionario **param){ Dicionario *aux = *param; printf("aux %d\n", (int)aux); if(aux==NULL){ printf("Nao existem palavras na lista\n"); }else do{ printf("%d\t%s\n",aux->palavra,aux->palavra); }while(moveToNext(&aux)); system("pause"); }
int PageDirectory::locateRecordPage(FileHandle &fh, int pageid){ int pgentry = -1; while (1) { for (int i = 0; i < get_pgnum(); i++) if (get_pgid(i) == pageid) { pgentry = i; break; } if (pgentry != -1) break; if (get_next() == 0) return -1; moveToNext(fh); } return pgentry; }
void DrawableSelector::handleInput(SDL_Event event) { SDL_Keycode keycode = event.key.keysym.sym; SDL_Scancode scancode = event.key.keysym.scancode; switch(event.type){ case SDL_KEYDOWN: if (scancode == SDL_SCANCODE_RIGHT) { moveToNext(); } else if (scancode == SDL_SCANCODE_LEFT) { moveToPrevious(); } break; default: break; } }
void SwitchEventsWidget::setEventsCursor(const QSharedPointer<EventsCursor> &eventsCursor) { EventsCursor *oldCursor = m_eventsCursor.data(); if (m_eventsCursor.data()) { disconnect(m_previousButton, 0, oldCursor, 0); disconnect(m_nextButton, 0, oldCursor, 0); disconnect(oldCursor, 0, this, 0); } m_eventsCursor = eventsCursor; if (m_eventsCursor) { connect(m_previousButton, SIGNAL(clicked()), m_eventsCursor.data(), SLOT(moveToPrevious())); connect(m_nextButton, SIGNAL(clicked()), m_eventsCursor.data(), SLOT(moveToNext())); connect(eventsCursor.data(), SIGNAL(eventSwitched(EventData*)), this, SLOT(updateButtonsState())); } updateButtonsState(); }
void CListBox::moveToPos(size_t which) { //Calculate new position size_t maxPossible; if (totalSize > items.size()) maxPossible = totalSize - items.size(); else maxPossible = 0; size_t newPos = std::min(which, maxPossible); //If move distance is 1 (most of calls from Slider) - use faster shifts instead of resetting all items if (first - newPos == 1) moveToPrev(); else if (newPos - first == 1) moveToNext(); else if (newPos != first) { first = newPos; reset(); } }