本文整理汇总了C++中UIntVector::size方法的典型用法代码示例。如果您正苦于以下问题:C++ UIntVector::size方法的具体用法?C++ UIntVector::size怎么用?C++ UIntVector::size使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UIntVector
的用法示例。
在下文中一共展示了UIntVector::size方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WriteCharStrings
EStatusCode CFFEmbeddedFontWriter::WriteCharStrings(const UIntVector& inSubsetGlyphIDs)
{
/*
1. build the charstrings data, looping the glyphs charstrings and writing a flattened
version of each charstring
2. write the charstring index based on offsets inside the data (size should be according to the max)
3. copy the data into the stream
*/
unsigned long* offsets = new unsigned long[inSubsetGlyphIDs.size() + 1];
MyStringBuf charStringsData;
OutputStringBufferStream charStringsDataWriteStream(&charStringsData);
CharStringType2Flattener charStringFlattener;
UIntVector::const_iterator itGlyphs = inSubsetGlyphIDs.begin();
EStatusCode status = PDFHummus::eSuccess;
do
{
unsigned short i=0;
for(; itGlyphs != inSubsetGlyphIDs.end() && PDFHummus::eSuccess == status; ++itGlyphs,++i)
{
offsets[i] = (unsigned long)charStringsDataWriteStream.GetCurrentPosition();
status = charStringFlattener.WriteFlattenedGlyphProgram( 0,
*itGlyphs,
&(mOpenTypeInput.mCFF),
&charStringsDataWriteStream);
}
if(status != PDFHummus::eSuccess)
break;
offsets[i] = (unsigned long)charStringsDataWriteStream.GetCurrentPosition();
charStringsData.pubseekoff(0,std::ios_base::beg);
// write index section
mCharStringPosition = mFontFileStream.GetCurrentPosition();
Byte sizeOfOffset = GetMostCompressedOffsetSize(offsets[i] + 1);
mPrimitivesWriter.WriteCard16((unsigned short)inSubsetGlyphIDs.size());
mPrimitivesWriter.WriteOffSize(sizeOfOffset);
mPrimitivesWriter.SetOffSize(sizeOfOffset);
for(i=0;i<=inSubsetGlyphIDs.size();++i)
mPrimitivesWriter.WriteOffset(offsets[i] + 1);
// Write data
InputStringBufferStream charStringsDataReadStream(&charStringsData);
OutputStreamTraits streamCopier(&mFontFileStream);
status = streamCopier.CopyToOutputStream(&charStringsDataReadStream);
if(status != PDFHummus::eSuccess)
break;
}while(false);
delete[] offsets;
return status;
}
示例2: WriteFDSelect
EStatusCode CFFEmbeddedFontWriter::WriteFDSelect(const UIntVector& inSubsetGlyphIDs,const FontDictInfoToByteMap& inNewFontDictsIndexes)
{
// always write format 3. cause at most cases the FD dicts count will be so low that it'd
// take a bloody mircale for no repeats to occur.
UIntVector::const_iterator itGlyphs = inSubsetGlyphIDs.begin();
mFDSelectPosition = mFontFileStream.GetCurrentPosition();
mPrimitivesWriter.WriteCard8(3);
LongFilePositionType rangesCountPosition = mFontFileStream.GetCurrentPosition();
mPrimitivesWriter.WriteCard16(1); // temporary. will get back to this later
unsigned short rangesCount = 1;
Byte currentFD,newFD;
unsigned short glyphIndex = 1;
FontDictInfoToByteMap::const_iterator itNewIndex =
inNewFontDictsIndexes.find(mOpenTypeInput.mCFF.mTopDictIndex[0].mFDSelect[*itGlyphs]);
// k. seems like i probably just imagine exceptions here. i guess there must
// be a proper FDSelect with FDs for all...so i'm defaulting to some 0
currentFD = (itNewIndex == inNewFontDictsIndexes.end() ? 0:itNewIndex->second);
mPrimitivesWriter.WriteCard16(0);
mPrimitivesWriter.WriteCard8(currentFD);
++itGlyphs;
for(; itGlyphs != inSubsetGlyphIDs.end(); ++itGlyphs,++glyphIndex)
{
itNewIndex =
inNewFontDictsIndexes.find(mOpenTypeInput.mCFF.mTopDictIndex[0].mFDSelect[*itGlyphs]);
newFD = (itNewIndex == inNewFontDictsIndexes.end() ? 0:itNewIndex->second);
if(newFD != currentFD)
{
currentFD = newFD;
mPrimitivesWriter.WriteCard16(glyphIndex);
mPrimitivesWriter.WriteCard8(currentFD);
++rangesCount;
}
}
mPrimitivesWriter.WriteCard16((unsigned short)inSubsetGlyphIDs.size());
// go back to ranges count if not equal to what's already written
if(rangesCount != 1)
{
LongFilePositionType currentPosition = mFontFileStream.GetCurrentPosition();
mFontFileStream.SetPosition(rangesCountPosition);
mPrimitivesWriter.WriteCard16(rangesCount);
mFontFileStream.SetPosition(currentPosition);
}
return mPrimitivesWriter.GetInternalState();
}
示例3: update
void TowerTemporal::update(float t)
{
static const float sShotFadeOut = 0.5f;
mTimeSinceLastAction += t;
float atkDur = 1.0f/mAtkSpeed;
if (mTimeSinceLastAction >= atkDur)
{
// Get all Aliens within the tower's range
Alien* alien = NULL;
UIntVector ids = getTargetsInRange();
for (size_t i = 0; i < ids.size(); ++i)
{
unsigned int id = ids[i];
alien = AlienFactory::getSingleton().getAlien(id);
if (alien && alien->getState() != Alien::DYING && alien->getState() != Alien::DEAD)
alien->slow(0.5f, atkDur*0.5f);
}
// Reset the scale of the shot graphics
mpShotGraphics->getParentSceneNode()->setScale(Ogre::Vector3::UNIT_SCALE);
mpShotGraphics->setVisible(true);
// Reset the time since last action
mTimeSinceLastAction = 0;
}
// Update the shot graphics
if (mTimeSinceLastAction < sShotFadeOut)
{
float shotPerc = mTimeSinceLastAction / sShotFadeOut;
Ogre::Vector3 scale = Ogre::Vector3::UNIT_SCALE * Ogre::Math::Sqrt(mRangeSqr) * 0.5;
scale = scale * Ogre::Math::Sqrt(shotPerc);
mpShotGraphics->getParentSceneNode()->setScale(scale);
mpShotGraphics->beginUpdate(0);
for (size_t i = 0; i < mRingVertices.size(); ++i)
{
mpShotGraphics->position(mRingVertices[i]);
mpShotGraphics->colour(0.33, 0.33, 1, 1-shotPerc);
}
mpShotGraphics->end();
}
else
{
mpShotGraphics->setVisible(false);
}
}
示例4: InternSubdivide
// ------------------------------------------------------------------------------------------------
// Note - this is an implementation of the standard (recursive) Cm-Cl algorithm without further
// optimizations (except we're using some nice LUTs). A description of the algorithm can be found
// here: http://en.wikipedia.org/wiki/Catmull-Clark_subdivision_surface
//
// The code is mostly O(n), however parts are O(nlogn) which is therefore the algorithm's
// expected total runtime complexity. The implementation is able to work in-place on the same
// mesh arrays. Calling #InternSubdivide() directly is not encouraged. The code can operate
// in-place unless 'smesh' and 'out' are equal (no strange overlaps or reorderings).
// Previous data is replaced/deleted then.
// ------------------------------------------------------------------------------------------------
void CatmullClarkSubdivider::InternSubdivide (
const aiMesh* const * smesh,
size_t nmesh,
aiMesh** out,
unsigned int num
)
{
ai_assert(NULL != smesh && NULL != out);
INIT_EDGE_HASH_TEMPORARIES();
// no subdivision requested or end of recursive refinement
if (!num) {
return;
}
UIntVector maptbl;
SpatialSort spatial;
// ---------------------------------------------------------------------
// 0. Offset table to index all meshes continuously, generate a spatially
// sorted representation of all vertices in all meshes.
// ---------------------------------------------------------------------
typedef std::pair<unsigned int,unsigned int> IntPair;
std::vector<IntPair> moffsets(nmesh);
unsigned int totfaces = 0, totvert = 0;
for (size_t t = 0; t < nmesh; ++t) {
const aiMesh* mesh = smesh[t];
spatial.Append(mesh->mVertices,mesh->mNumVertices,sizeof(aiVector3D),false);
moffsets[t] = IntPair(totfaces,totvert);
totfaces += mesh->mNumFaces;
totvert += mesh->mNumVertices;
}
spatial.Finalize();
const unsigned int num_unique = spatial.GenerateMappingTable(maptbl,ComputePositionEpsilon(smesh,nmesh));
#define FLATTEN_VERTEX_IDX(mesh_idx, vert_idx) (moffsets[mesh_idx].second+vert_idx)
#define FLATTEN_FACE_IDX(mesh_idx, face_idx) (moffsets[mesh_idx].first+face_idx)
// ---------------------------------------------------------------------
// 1. Compute the centroid point for all faces
// ---------------------------------------------------------------------
std::vector<Vertex> centroids(totfaces);
unsigned int nfacesout = 0;
for (size_t t = 0, n = 0; t < nmesh; ++t) {
const aiMesh* mesh = smesh[t];
for (unsigned int i = 0; i < mesh->mNumFaces;++i,++n)
{
const aiFace& face = mesh->mFaces[i];
Vertex& c = centroids[n];
for (unsigned int a = 0; a < face.mNumIndices;++a) {
c += Vertex(mesh,face.mIndices[a]);
}
c /= static_cast<float>(face.mNumIndices);
nfacesout += face.mNumIndices;
}
}
{
// we want edges to go away before the recursive calls so begin a new scope
EdgeMap edges;
// ---------------------------------------------------------------------
// 2. Set each edge point to be the average of all neighbouring
// face points and original points. Every edge exists twice
// if there is a neighboring face.
// ---------------------------------------------------------------------
for (size_t t = 0; t < nmesh; ++t) {
const aiMesh* mesh = smesh[t];
for (unsigned int i = 0; i < mesh->mNumFaces;++i) {
const aiFace& face = mesh->mFaces[i];
for (unsigned int p =0; p< face.mNumIndices; ++p) {
const unsigned int id[] = {
face.mIndices[p],
face.mIndices[p==face.mNumIndices-1?0:p+1]
};
const unsigned int mp[] = {
maptbl[FLATTEN_VERTEX_IDX(t,id[0])],
maptbl[FLATTEN_VERTEX_IDX(t,id[1])]
};
Edge& e = edges[MAKE_EDGE_HASH(mp[0],mp[1])];
//.........这里部分代码省略.........
示例5: LSLOC
/*!
* Extracts and stores logical lines of code.
* Determines and extract logical SLOC to place in the result variable
* using addSLOC function. Each time the addSLOC function is called,
* a new logical SLOC is added. This function assumes that the directive
* is handled before it is called.
*
* \param result counter results
* \param line processed physical line of code
* \param lineBak original physical line of code
* \param strLSLOC processed logical string
* \param strLSLOCBak original logical string
* \param paren_cnt count of parenthesis
* \param loopWhiteSpace count of white space to determine loop ends
*/
void CPythonCounter::LSLOC(results* result, string line, size_t lineNumber, string lineBak, string &strLSLOC, string &strLSLOCBak,
unsigned int &paren_cnt, UIntVector &loopWhiteSpace)
{
#define CONT_STR_LENGTH 18
string continuation_str[] = {"is", "in", "not", "+", "-", "*", "/", "=", "<", ">", "|", "&", "%", "^", "\\", "~", ",", "$"};
size_t start = 0; // starting index of the working string
size_t i = 0, idx, strSize;
int n;
bool trunc_flag = false;
unsigned int cnt = 0, numWS;
string exclude = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_$";
string tmp;
// process:
// paren_cnt is used with {} [] ()
// 1. check if the current char is in one of the parentheses
// 2. if no, check if the line has : or ; (statement separators), except else:
// 3. if yes, count and put the statement in the result
// 4. if the line does not ends with a continuation string or a statement separator (handled)
// and the line is not in one of the parentheses
// then count and put the statement in the result
// 5. physical count considers all lines executables (or directives, no declarations)
// check for loop ends, new loops, and record white space in order to determine ends
if (print_cmplx)
{
// check white space for loop ends
if (loopWhiteSpace.size() > 0)
{
// get white space
tmp = line;
tmp = CUtil::TrimString(tmp, -1);
numWS = (unsigned)(line.length() - tmp.length());
// check for loop ends
for (n = (int)loopWhiteSpace.size() - 1; n >= 0; n--)
{
if (loopWhiteSpace.at(n) != numWS)
break;
else
loopWhiteSpace.pop_back();
}
}
// check for loop keywords (for, while)
cnt = 0;
CUtil::CountTally(line, loop_keywords, cnt, 1, exclude, "", "", NULL);
if (cnt > 0)
{
if (loopWhiteSpace.size() < 1)
{
// get white space
tmp = line;
tmp = CUtil::TrimString(tmp, -1);
numWS = (unsigned)(line.length() - tmp.length());
}
// add nested loop white space and record nested loop level
for (i = 0; i < cnt; i++)
{
loopWhiteSpace.push_back(numWS);
if ((unsigned int)result->cmplx_nestloop_count.size() < loopWhiteSpace.size())
result->cmplx_nestloop_count.push_back(1);
else
result->cmplx_nestloop_count[loopWhiteSpace.size()-1]++;
}
}
}
line = CUtil::TrimString(line);
lineBak = CUtil::TrimString(lineBak);
size_t line_length = line.length();
bool lineContinued = false;
while (i < line_length)
{
switch (line[i])
{
case '{': case '[': case '(': // parentheses opener
paren_cnt++;
break;
case '}': case ']': case ')': // parentheses closer
//.........这里部分代码省略.........
示例6: WriteEncodings
EStatusCode CFFEmbeddedFontWriter::WriteEncodings(const UIntVector& inSubsetGlyphIDs)
{
// if it's a CID. don't bother with encodings (marks as 0)
if(mIsCID)
{
mEncodingPosition = 0;
return PDFHummus::eSuccess;
}
// not CID, write encoding, according to encoding values from the original font
EncodingsInfo* encodingInfo = mOpenTypeInput.mCFF.mTopDictIndex[0].mEncoding;
if(encodingInfo->mEncodingStart <= 1)
{
mEncodingPosition = encodingInfo->mEncodingStart;
return PDFHummus::eSuccess;
}
else
{
// original font had custom encoding, let's subset it according to just the glyphs we
// actually have. but cause i'm lazy i'll just do the first format.
// figure out if we got supplements
UIntVector::const_iterator it = inSubsetGlyphIDs.begin();
ByteAndUShortList supplements;
for(; it != inSubsetGlyphIDs.end();++it)
{
// don't be confused! the supplements is by SID! not GID!
unsigned short sid = mOpenTypeInput.mCFF.GetGlyphSID(0,*it);
UShortToByteList::iterator itSupplements = encodingInfo->mSupplements.find(sid);
if(itSupplements != encodingInfo->mSupplements.end())
{
ByteList::iterator itMoreEncoding = itSupplements->second.begin();
for(; itMoreEncoding != itSupplements->second.end(); ++itMoreEncoding)
supplements.push_back(ByteAndUShort(*itMoreEncoding,sid));
}
}
mEncodingPosition = mFontFileStream.GetCurrentPosition();
if(supplements.size() > 0)
mPrimitivesWriter.WriteCard8(0x80);
else
mPrimitivesWriter.WriteCard8(0);
// assuming that 0 is in the subset glyphs IDs, which does not require encoding
// get the encodings count
Byte encodingGlyphsCount = std::min((Byte)(inSubsetGlyphIDs.size()-1),encodingInfo->mEncodingsCount);
mPrimitivesWriter.WriteCard8(encodingGlyphsCount);
for(Byte i=0; i < encodingGlyphsCount;++i)
{
if(inSubsetGlyphIDs[i+1] < encodingInfo->mEncodingsCount)
mPrimitivesWriter.WriteCard8(encodingInfo->mEncoding[inSubsetGlyphIDs[i+1]-1]);
else
mPrimitivesWriter.WriteCard8(0);
}
if(supplements.size() > 0)
{
mPrimitivesWriter.WriteCard8(Byte(supplements.size()));
ByteAndUShortList::iterator itCollectedSupplements = supplements.begin();
for(; itCollectedSupplements != supplements.end(); ++itCollectedSupplements)
{
mPrimitivesWriter.WriteCard8(itCollectedSupplements->first);
mPrimitivesWriter.WriteCard16(itCollectedSupplements->second);
}
}
}
return mPrimitivesWriter.GetInternalState();
}