QVector<CacheLine> ReadAheadDecisionMaker::getReadAheadLines() { qulonglong endAddress = qMin(getReadAheadAddress() + getReadAheadSize(), getRaidSize()); QVector<CacheLine> readAheadLines; if (getReadAheadAddress() < endAddress){ for (qulonglong i = getReadAheadAddress(); i < endAddress; i++) readAheadLines.push_back(CacheLine(i)); qulonglong delta = endAddress - getReadAheadAddress(); setReadAheadAddress( getReadAheadAddress()+delta); }else{ enableReadAhead(false); } return readAheadLines; }
int getline(int listflag) /* * Read in a line, preprocess it, and dump it to the list and preproc files * Also strip comments and alter trigraphs */ { int rv, rvc, prepping, temp; static int inpreprocess; char ibuf[4096], xbuf[4096], *xptr; char *ptr = ibuf; if (cantnewline) { return (0); } repeatit: do { rv = FALSE; prepping = FALSE; rvc = 0; // add: while (rvc + 131 < 4096 && !rv) { ++lineno; ++errlineno; rv = getstring(ibuf + rvc, 4096 - rvc, inputFile); if (rv) { break; } rvc = strlen(ibuf); if (ibuf[rvc - 1] != '\n') { ibuf[rvc++] = '\n'; ibuf[rvc] = 0; } rvc -= 2; while (ibuf[rvc] == ' ') rvc--; // if (ibuf[rvc] != '\\') break; } if (rvc) rv = FALSE; if (rv) { if (ifs) generror(ERR_PREPROCMATCH, 0); if (commentlevel) generror(ERR_COMMENTMATCH, 0); if (incldepth > 0) { if (inSymFile && !strcmp(infile, rcIdFile)) inSymFile = FALSE; fclose(inputFile); inputFile = inclfile[--incldepth]; lineno = inclline[incldepth]; inhfile = inclhfile[incldepth]; infile = inclfname[incldepth]; free(inputBuffer); inputBuffer = inclInputBuffer[incldepth]; inputLen = inclInputLen[incldepth]; ibufPtr = inclibufPtr[incldepth]; errlineno = lineno; errfile = infile; ifs = ifshold[incldepth]; commentlevel = 0; popif(); goto repeatit; } } if (rv) return 1; lptr = inputline; ptr = ibuf; xptr = xbuf; while ((temp = *ptr++) != 0) { *lptr++ = (unsigned char)temp; *xptr++ = (unsigned char)temp; } *lptr = 0; *xptr = 0; stripcomment(inputline); lptr = inputline; while (iswhitespacechar(*lptr)) lptr++; CacheLine((WCHAR *)lptr, xbuf); if (lptr[0] == '#') { inpreprocess++; listflag = preprocess(); inpreprocess--; prepping = TRUE; lastst = eol; } if (incldepth) lastst = eol; } while (ifskip || prepping || (inhfile && !inpreprocess)) ; rvc = strlen(ibuf); /* if (defcheck(inputline) == - 10 && rvc + 131 < 4096) { if (ibuf[rvc - 1] == '\n') ibuf[rvc - 1] = ' '; goto add; } */ return 0; }
/** * @param hdc - drawing context. * @param prcPaint - the rectangle in which the painting is requested. */ void CTextView::DrawTextView(HDC hdc, RECT* prcPaint) { _ASSERTE(g_pResManager != NULL); if (prcPaint == NULL) { RECT rcClient; GetClientRect(m_hwnd, &rcClient); prcPaint = &rcClient; } if (IsRectEmpty(prcPaint)) return; #ifdef USE_MEM_DC int nClientWidth = prcPaint->right - prcPaint->left; int nClientHeight = prcPaint->bottom - prcPaint->top; HBITMAP hbmpMem; hbmpMem = CreateCompatibleBitmap(hdc, nClientWidth, nClientHeight); if (hbmpMem == NULL) return; HDC hdcMem; hdcMem = CreateCompatibleDC(hdc); if (hdcMem == NULL) { DeleteBitmap(hbmpMem); return; } SetViewportOrgEx(hdcMem, -prcPaint->left, -prcPaint->top, NULL); HBITMAP hbmpSafe = SelectBitmap(hdcMem, hbmpMem); #else // CS_PARENTDC sets the clipping rectangle of the child window to that of the parent window // so that the child can draw on the parent. Text view inherits this style from sub-classed // static control. This causes problems with unclipped TabbedTextOut() output. HRGN hrgn = CreateRectRgnIndirect(prcPaint); SelectClipRgn(hdc, hrgn); DeleteRgn(hrgn); HDC hdcMem = hdc; #endif FillRect(hdcMem, prcPaint, g_pResManager->m_hbrWindowBrush); COLORREF rgbOldTextColor = SetTextColor(hdcMem, GetSysColor(COLOR_WINDOWTEXT)); COLORREF rgbOldBackground = SetBkColor(hdcMem, GetSysColor(COLOR_WINDOW)); HFONT hOldFont = g_pResManager->m_hFixedFont ? SelectFont(hdcMem, g_pResManager->m_hFixedFont) : NULL; TEXTMETRIC tmetr; ::GetTextMetrics(hdcMem, &tmetr); DWORD dwNumLines = m_arrLines.GetCount(); DWORD dwTopLineNum = GetScrollPos(m_hwnd, SB_VERT); DWORD dwTopVisLineNum = dwTopLineNum + prcPaint->top / tmetr.tmHeight; if (dwTopVisLineNum < dwNumLines) { int nHorPos = tmetr.tmAveCharWidth - GetScrollPos(m_hwnd, SB_HORZ); int nVertPos = prcPaint->top - prcPaint->top % tmetr.tmHeight; DWORD dwNumVisLines = prcPaint->bottom / tmetr.tmHeight; if (prcPaint->bottom % tmetr.tmHeight) ++dwNumVisLines; DWORD dwBottomVisLineNum = dwTopLineNum + dwNumVisLines - 1; if (dwBottomVisLineNum >= dwNumLines) dwBottomVisLineNum = dwNumLines - 1; for (DWORD dwLineNum = dwTopVisLineNum; dwLineNum <= dwBottomVisLineNum; ++dwLineNum) { CacheLine(dwLineNum); const CLineInfo& rLineInfo = m_arrLines[(int)dwLineNum]; int nTextWidth = LOWORD(TabbedTextOut(hdcMem, nHorPos, nVertPos, m_pTextCache + rLineInfo.m_dwTextStart, rLineInfo.m_dwLength, 0, NULL, -nHorPos)); if (rLineInfo.m_bTruncated) TextOut(hdcMem, nHorPos + nTextWidth, nVertPos, g_szEllipsis, g_dwEllipsisLength); nVertPos += tmetr.tmHeight; } } SetTextColor(hdcMem, rgbOldTextColor); SetBkColor(hdcMem, rgbOldBackground); if (hOldFont) SelectFont(hdcMem, hOldFont); #ifdef USE_MEM_DC BitBlt(hdc, prcPaint->left, prcPaint->top, nClientWidth, nClientHeight, hdcMem, prcPaint->left, prcPaint->top, SRCCOPY); SelectBitmap(hdcMem, hbmpSafe); DeleteDC(hdcMem); DeleteBitmap(hbmpMem); #endif }