/*! * Binary search to find the first frag at position before pos * @param PT_DocPosition we want to find for. * @returns pf_Frag * pointer to the Frag with position immediately before pos */ pf_Frag * pf_Fragments::findFirstFragBeforePos(PT_DocPosition pos) const { UT_uint32 numFrags = getNumberOfFrags(); #ifdef DEBUG UT_uint32 numIters = 0; #endif xxx_UT_DEBUGMSG(("JCA: findFirstFragBeforePos (%d). NbFrags = %d...\n", pos, numFrags)); if (numFrags < 1) return NULL; pf_Frag * last = getLast(); if (last && pos >= last->getPos()) { xxx_UT_DEBUGMSG(("JCA: Found last Frag[%p] @ pos %d Looking for pos %d \n", getLast(), last->getPos(), pos)); return last; } pf_Frag* cache = getCache(); if (cache && pos >= cache->getPos() && pos < cache->getPos() + cache->getLength()) { return cache; } // //Look in the next Frag now // if(cache) { cache = cache->getNext(); if (cache && pos >= cache->getPos() && pos < cache->getPos() + cache->getLength()) { setCache(cache); return cache; } } // // OK do a binary search. // UT_sint32 diff = numFrags / 2; UT_sint32 curFragNo = diff; pf_Frag * curFrag = m_pLast; while (diff > 1) { #ifdef DEBUG ++numIters; #endif curFrag = (pf_Frag *) m_vecFrags.getNthItem(curFragNo); if (pos < curFrag->getPos()) { diff = diff / 2; curFragNo -= diff; } else { diff = diff / 2; curFragNo += diff; } } while (curFrag && pos > curFrag->getPos()) { #ifdef DEBUG ++numIters; #endif curFrag = curFrag->getNext(); } while (curFrag && pos < curFrag->getPos()) { #ifdef DEBUG ++numIters; #endif curFrag = curFrag->getPrev(); } xxx_UT_DEBUGMSG(("JCA: Found Frag[%p] at pos %d Looking for pos %d with [%d] iterations\n", curFrag, curFrag->getPos(), pos, numIters)); if (curFrag && curFrag->getPrev() && curFrag->getNext()) { xxx_UT_DEBUGMSG(("JCA: Frag pos before = %d Frag Pos After %d Looking for pos %d \n", curFrag->getPrev()->getPos(), curFrag->getPos(), curFrag->getNext()->getPos(), pos)); } setCache(curFrag); return curFrag; }
void NetworkAccessManager::clearCache(int period) { getCache()->clearCache(period); }
int GetCacheMesTextureID( char *msg, int font_size, int font_style ) { // キャッシュ済みのテクスチャIDを返す(OpenGLテクスチャIDを返す) // (作成されていないメッセージテクスチャは自動的に作成する) // (作成の必要がない場合は-1を返す) // GLuint id; int texid; int tsx,tsy; unsigned char *pImg; TEXINF *t; int mylen; short mycache; mycache = str2hash( msg, &mylen ); // キャッシュを取得 if ( mylen <= 0 ) return -1; texid = getCache( msg, mycache, font_size, font_style ); if ( texid >= 0 ) { return texid; // キャッシュがあった } // キャッシュが存在しないので作成 pImg = (unsigned char *)j_callFontBitmap( msg, font_size, font_style, &tsx, &tsy ); texid = MakeEmptyTex( tsx, tsy ); if ( texid < 0 ) return -1; t = GetTex( texid ); t->hash = mycache; t->font_size = font_size; t->font_style = font_style; if ( curmestex >= GetSysReq(SYSREQ_MESCACHE_MAX) ) { // エントリ数がオーバーしているものは次のフレームで破棄 t->life = 0; t->buf[0] = 0; } else { // キャッシュの登録 if ( mylen >= ( TEXMES_NAME_BUFFER - 1 ) ) { t->text = (char *)malloc( mylen+1 ); // テキストハッシュネーム用バッファを作成する strcpy( t->text, msg ); } else { strcpy( t->buf, msg ); // 標準バッファにコピーする } } id = (GLuint)t->texid; glBindTexture( GL_TEXTURE_2D, id ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glPixelStorei( GL_UNPACK_ALIGNMENT, 1); glTexSubImage2D( GL_TEXTURE_2D, 0, (GLint)0, (GLint)0, (GLsizei)tsx, (GLsizei)tsy, GL_ALPHA, GL_UNSIGNED_BYTE, pImg ); glBindTexture(GL_TEXTURE_2D, 0); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); free(pImg); return texid; }
// queryType: 0, create sequence. 1, alter sequence. 2, IDENTITY col. short ElemDDLSGOptions::validate(short queryType) { char queryTypeStr[40]; if (queryType == 0) strcpy(queryTypeStr, "CREATE SEQUENCE"); else if (queryType == 1) strcpy(queryTypeStr, "ALTER SEQUENCE"); else strcpy(queryTypeStr, "IDENTITY column"); Int64 minValue = 0; Int64 startValue = 0; Int64 increment = 0; Int64 maxValue = LONG_MAX - 1; NAString dtStr; if (fsDataType_ != COM_UNKNOWN_FSDT) { switch (fsDataType_) { case COM_UNSIGNED_BIN16_FSDT: maxValue = USHRT_MAX; dtStr = COM_SMALLINT_UNSIGNED_SDT_LIT; break; case COM_UNSIGNED_BIN32_FSDT: maxValue = UINT_MAX; dtStr = COM_INTEGER_UNSIGNED_SDT_LIT; break; case COM_SIGNED_BIN64_FSDT: maxValue = LONG_MAX - 1; dtStr = COM_LARGEINT_SIGNED_SDT_LIT; break; default: *CmpCommon::diags() << DgSqlCode(-1510); return -1; } } if (queryType == 1) // alter { if ((isMinValueSpecified()|| isStartValueSpecified())) { *CmpCommon::diags() << DgSqlCode(-1592) << (isMinValueSpecified() ? DgString0("MINVALUE") : DgString0("START WITH")) << DgString1(queryTypeStr); return -1; } minValue = getMinValue(); startValue = getStartValue(); increment = getIncrement(); if (isMaxValueSpecified() && (NOT isNoMaxValue())) { if ((fsDataType_ != COM_UNKNOWN_FSDT) && (getMaxValue() > maxValue)) { *CmpCommon::diags() << DgSqlCode(-1576) << DgString0("MAXVALUE") << DgString1(dtStr); return -1; } } maxValue = getMaxValue(); } // alter else { if (isResetSpecified()) { *CmpCommon::diags() << DgSqlCode(-1592) << DgString0("RESET") << DgString1(queryTypeStr); return -1; } minValue = ((isMinValueSpecified() && (NOT isNoMinValue())) ? getMinValue() : 1LL); startValue = (isStartValueSpecified() ? getStartValue() : minValue); increment = (isIncrementSpecified() ? getIncrement() : 1LL); } //else if (isMaxValueSpecified() && (NOT isNoMaxValue())) { if ((fsDataType_ != COM_UNKNOWN_FSDT) && (getMaxValue() > maxValue)) { *CmpCommon::diags() << DgSqlCode(-1576) << DgString0("MAXVALUE") << DgString1(dtStr); return -1; } maxValue = getMaxValue(); } if (minValue == 0) { *CmpCommon::diags() << DgSqlCode(-1571) << DgString0("MINVALUE") << DgString1(queryTypeStr); return -1; } if (minValue < 0) { *CmpCommon::diags() << DgSqlCode(-1572) << DgString0("MINVALUE") << DgString1(queryTypeStr); return -1; } if (maxValue == 0) { *CmpCommon::diags() << DgSqlCode(-1571) << DgString0("MAXVALUE") << DgString1(queryTypeStr); return -1; } if (maxValue < 0) { *CmpCommon::diags() << DgSqlCode(-1572) << DgString0("MAXVALUE") << DgString1(queryTypeStr); return -1; } if (increment == 0) { *CmpCommon::diags() << DgSqlCode(-1571) << DgString0("INCREMENT BY") << DgString1(queryTypeStr); return -1; } if (increment < 0) { *CmpCommon::diags() << DgSqlCode(-1572) << DgString0("INCREMENT BY") << DgString1(queryTypeStr); return -1; } if (startValue < 0) { *CmpCommon::diags() << DgSqlCode(-1572) << DgString0("START WITH") << DgString1(queryTypeStr); return -1; } if (maxValue <= minValue) { *CmpCommon::diags() << DgSqlCode(-1570) << DgString0(queryTypeStr); return -1; } if (startValue > maxValue) { *CmpCommon::diags() << DgSqlCode(-1573) << DgString0(queryTypeStr); return -1; } if (startValue < minValue) { *CmpCommon::diags() << DgSqlCode(-1573) << DgString0(queryTypeStr); return -1; } if (increment > (maxValue - minValue)) { *CmpCommon::diags() << DgSqlCode(-1575) << DgString0(queryTypeStr); return -1; } Int64 cache = 0; Int64 minVal = MAXOF(startValue, minValue); Int64 rangeOfVals = (maxValue-minVal)/increment + 1; if (isCacheSpecified()) cache = getCache(); else cache = MINOF(rangeOfVals, 25); if (NOT isNoCache()) { if ((cache <= 1) || (cache > rangeOfVals)) { *CmpCommon::diags() << DgSqlCode(-1577) << DgString0(queryTypeStr); return -1; } } cache = MINOF(rangeOfVals, cache); setStartValue(startValue); setIncrement(increment); setMinValue(minValue); setMaxValue(maxValue); if (NOT isCacheSpecified()) setCache(cache); return 0; }
int GetCacheMesTextureID( char *msg, int font_size, int font_style ) { // キャッシュ済みのテクスチャIDを返す(OpenGLテクスチャIDを返す) // (作成されていないメッセージテクスチャは自動的に作成する) // (作成の必要がない場合は-1を返す) // #ifdef HSPNDK GLuint id; int texid; int tsx,tsy; unsigned char *pImg; TEXINF *t; int mylen; short mycache; mycache = str2hash( msg, &mylen ); // キャッシュを取得 if ( mylen <= 0 ) return -1; texid = getCache( msg, mycache, font_size, font_style ); if ( texid >= 0 ) { return texid; // キャッシュがあった } // キャッシュが存在しないので作成 pImg = (unsigned char *)j_callFontBitmap( msg, font_size, font_style, &tsx, &tsy ); texid = MakeEmptyTex( tsx, tsy ); if ( texid < 0 ) return -1; t = GetTex( texid ); t->hash = mycache; t->font_size = font_size; t->font_style = font_style; if ( curmestex >= GetSysReq(SYSREQ_MESCACHE_MAX) ) { // エントリ数がオーバーしているものは次のフレームで破棄 t->life = 0; t->buf[0] = 0; } else { // キャッシュの登録 if ( mylen >= ( TEXMES_NAME_BUFFER - 1 ) ) { t->text = (char *)malloc( mylen+1 ); // テキストハッシュネーム用バッファを作成する strcpy( t->text, msg ); } else { strcpy( t->buf, msg ); // 標準バッファにコピーする } } id = (GLuint)t->texid; glBindTexture( GL_TEXTURE_2D, id ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glPixelStorei( GL_UNPACK_ALIGNMENT, 1); glTexSubImage2D( GL_TEXTURE_2D, 0, (GLint)0, (GLint)0, (GLsizei)tsx, (GLsizei)tsy, GL_ALPHA, GL_UNSIGNED_BYTE, pImg ); glBindTexture(GL_TEXTURE_2D, 0); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); free(pImg); return texid; #endif #ifdef HSPEMSCRIPTEN GLuint id; int texid; int tsx,tsy; unsigned char *pImg; TEXINF *t; int mylen; short mycache; mycache = str2hash( msg, &mylen ); // キャッシュを取得 if ( mylen <= 0 ) return -1; texid = getCache( msg, mycache, font_size, font_style ); if ( texid >= 0 ) { return texid; // キャッシュがあった } EM_ASM_({ var d = document.getElementById('hsp3dishFontDiv'); if (!d) { d = document.createElement("div"); d.id = 'hsp3dishFontDiv'; d.style.setProperty("width", "auto"); d.style.setProperty("height", "auto"); d.style.setProperty("position", "absolute"); d.style.setProperty("visibility", "hidden"); } d.style.setProperty("font", $1 + "px 'sans-serif'"); document.body.appendChild(d); var t = document.createTextNode(Pointer_stringify($0)); if (d.hasChildNodes()) d.removeChild(d.firstChild); d.appendChild(t); }, msg, font_size);