//------------------------------------------------------------------------------ stPage * stPlainDiskPageManager::GetPage(stPageID pageid){ stPage * myPage; // Do not allow users to load header page from this file. if ((pageid != 0) && (pageid <= header->PageCount)){ // Get from cache myPage = pageInstanceCache->Get(); // Read data... lseek(fd, PageID2Offset(pageid), SEEK_SET); read(fd, myPage->GetData(), header->PageSize); myPage->SetPageID(pageid); // Update Counters UpdateReadCounter(); return myPage; }else{ // Error!!! #ifdef __stDEBUG__ throw invalid_argument("Invalid page ID."); #else return NULL; #endif //__stDEBUG__ }//end if }//end stPlainDiskPageManager::GetPage
//------------------------------------------------------------------------------ stPage * stDiskPageManager::GetHeaderPage(){ stPage *hPage = new stPage(this->GetHeaderPageSize()); myStorage->ReadUserHeader(hPage->GetData()); // Update Counters UpdateReadCounter(); return hPage; }//end stDiskPageManager::GetHeaderPage()
stPage * stPlainDiskPageManager::GetHeaderPage(){ // Update read count UpdateReadCounter(); // Effective read lseek(fd, 0, SEEK_SET); read(fd, (void *)this->headerPage->GetTrueData(), header->PageSize); return this->headerPage; }//end stPlainDiskPageManager::GetheaderPage
static int RawCanWrite(SexyAL_device *device, uint32_t *can_write) { CMI8738_Driver_t *ds = (CMI8738_Driver_t *)device->private_data; UpdateReadCounter(ds); // Handle underflow. if(ds->write_counter < ds->read_counter) ds->write_counter = ds->read_counter; *can_write = (device->buffering.buffer_size - (ds->write_counter - ds->read_counter)) << 2; return(1); }
static int Clear(SexyAL_device *device) { CMI8738_Driver_t *ds = (CMI8738_Driver_t *)device->private_data; const uint32_t base = ds->dmabuf.rm_segment << 4; const uint32_t siz = ds->dmabuf.size << 4; Pause(device, true); _farsetsel(_dos_ds); for(unsigned i = 0; i < siz; i += 4) _farnspokel(base + i, 0); UpdateReadCounter(ds); ds->write_counter = ds->read_counter; return(1); }
//------------------------------------------------------------------------------ stPage * stDiskPageManager::GetPage(stPageID pageid){ stPage * myPage; if ((int)pageid <= myStorage->GetTotalPagesIncludingDisposed()){ // Get from cache myPage = pageInstanceCache->Get(); myStorage->ReadPage(pageid-1, myPage->GetData()); myPage->SetPageID(pageid); // Update Counters UpdateReadCounter(); return myPage; }else{ // Error!!! return NULL; }//end if }//end stDiskPageManager::GetPage()