本文整理汇总了C++中UIntVector类的典型用法代码示例。如果您正苦于以下问题:C++ UIntVector类的具体用法?C++ UIntVector怎么用?C++ UIntVector使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了UIntVector类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: main
int main()
{
// Några saker som ska fungera:
UIntVector a(7); // initiering med 7 element
UIntVector b(a); // kopieringskonstruktor
UIntVector c = a; // kopieringskonstruktor
UIntVector d(6);
a = b; // tilldelning genom kopiering
a[5] = 7; // tilldelning till element
const UIntVector e(10); // konstant objekt med 10 element
int i = e[5]; // const int oper[](int) const körs
i = a[0]; // vektorn är nollindexerad
i = a[5]; // int oper[](int) körs
a[5]++; // öka värdet till 8
try {
i = e[10]; // försöker hämta element som ligger utanför e
} catch (std::out_of_range e) {
std::cout << e.what() << std::endl;
}
// Diverse saker att testa
e[5] = 3; // fel: (kompilerar ej) tilldelning till const
b = b; // hmm: se till att inte minnet som skall behållas frigörs
return 0;
}
开发者ID:kwabe007,项目名称:spel-spelet,代码行数:31,代码来源:test_vec.cpp
示例2: WriteCharsets
EStatusCode CFFEmbeddedFontWriter::WriteCharsets(const UIntVector& inSubsetGlyphIDs,
UShortVector* inCIDMapping)
{
// since this is a subset the chances that i'll get a defult charset are 0.
// hence i'll always do some charset. and using format 0 !!1
UIntVector::const_iterator it = inSubsetGlyphIDs.begin();
++it; // skip the 0
mCharsetPosition = mFontFileStream.GetCurrentPosition();
mPrimitivesWriter.WriteCard8(0);
if(mIsCID && inCIDMapping)
{
UShortVector::const_iterator itCIDs = inCIDMapping->begin();
++itCIDs;
for(; it != inSubsetGlyphIDs.end(); ++it,++itCIDs)
mPrimitivesWriter.WriteSID(*itCIDs);
}
else
{
// note that this also works for CIDs! cause in this case the SIDs are actually
// CIDs
for(; it != inSubsetGlyphIDs.end(); ++it)
mPrimitivesWriter.WriteSID(mOpenTypeInput.mCFF.GetGlyphSID(0,*it));
}
return mPrimitivesWriter.GetInternalState();
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:28,代码来源:CFFEmbeddedFontWriter.cpp
示例3: GetOrderedKeys
static UIntVector GetOrderedKeys(const UIntAndGlyphEncodingInfoVector& inMap)
{
UIntVector result;
for(UIntAndGlyphEncodingInfoVector::const_iterator it = inMap.begin(); it != inMap.end(); ++it)
result.push_back(it->first);
sort(result.begin(),result.end());
return result;
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:8,代码来源:TrueTypeDescendentFontWriter.cpp
示例4: TRACE_LOG1
EStatusCode CFFDescendentFontWriter::WriteFont( ObjectIDType inDecendentObjectID,
const std::string& inFontName,
FreeTypeFaceWrapper& inFontInfo,
const UIntAndGlyphEncodingInfoVector& inEncodedGlyphs,
ObjectsContext* inObjectsContext,
bool inEmbedFont)
{
// reset embedded font object ID (and flag...to whether it was actually embedded or not, which may
// happen due to font embedding restrictions)
mEmbeddedFontFileObjectID = 0;
// Logically speaking, i shouldn't be getting to CID writing
// if in type 1. at least, this is the current assumption, since
// i don't intend to support type 1 CIDs, but just regular type 1s.
// as such - fail if got here for type 1
const char* fontType = inFontInfo.GetTypeString();
if(strcmp(scType1,fontType) == 0)
{
TRACE_LOG1("CFFDescendentFontWriter::WriteFont, Exception. identified type1 font when writing CFF CID font, font name - %s. type 1 CIDs are not supported.",inFontName.substr(0, MAX_TRACE_SIZE - 200).c_str());
return PDFHummus::eFailure;
}
if (inEmbedFont)
{
CFFEmbeddedFontWriter embeddedFontWriter;
UIntAndGlyphEncodingInfoVector encodedGlyphs = inEncodedGlyphs;
UIntVector orderedGlyphs;
UShortVector cidMapping;
// Gal: the following sort completely ruins everything.
// the order of the glyphs should be maintained per the ENCODED characthers
// which is how the input is recieved. IMPORTANT - the order is critical
// for the success of the embedding, as the order determines the order of the glyphs
// in the subset font and so their GID which MUST match the encoded char.
//sort(encodedGlyphs.begin(), encodedGlyphs.end(), sEncodedGlypsSort);
for (UIntAndGlyphEncodingInfoVector::const_iterator it = encodedGlyphs.begin();
it != encodedGlyphs.end();
++it)
{
orderedGlyphs.push_back(it->first);
cidMapping.push_back(it->second.mEncodedCharacter);
}
EStatusCode status = embeddedFontWriter.WriteEmbeddedFont(inFontInfo,
orderedGlyphs,
scCIDFontType0C,
inFontName,
inObjectsContext,
&cidMapping,
mEmbeddedFontFileObjectID);
if (status != PDFHummus::eSuccess)
return status;
}
DescendentFontWriter descendentFontWriter;
return descendentFontWriter.WriteFont(inDecendentObjectID,inFontName,inFontInfo,inEncodedGlyphs,inObjectsContext,this);
}
开发者ID:galkahana,项目名称:HummusJS,代码行数:58,代码来源:CFFDescendentFontWriter.cpp
示例5:
void Type1ToCFFEmbeddedFontWriter::TranslateFromFreeTypeToType1(FreeTypeFaceWrapper& inFontInfo,
const UIntVector& inSubsetGlyphIDs,
StringVector& outGlyphNames)
{
UIntVector::const_iterator it = inSubsetGlyphIDs.begin();
for(; it != inSubsetGlyphIDs.end(); ++it)
outGlyphNames.push_back(inFontInfo.GetGlyphName(*it));
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:10,代码来源:Type1ToCFFEmbeddedFontWriter.cpp
示例6: data
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;
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:55,代码来源:CFFEmbeddedFontWriter.cpp
示例7: 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();
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:50,代码来源:CFFEmbeddedFontWriter.cpp
示例8: AddDependentGlyphs
EStatusCode CFFEmbeddedFontWriter::AddDependentGlyphs(UIntVector& ioSubsetGlyphIDs)
{
EStatusCode status = PDFHummus::eSuccess;
UIntSet glyphsSet;
UIntVector::iterator it = ioSubsetGlyphIDs.begin();
bool hasCompositeGlyphs = false;
for(;it != ioSubsetGlyphIDs.end() && PDFHummus::eSuccess == status; ++it)
{
bool localHasCompositeGlyphs;
status = AddComponentGlyphs(*it,glyphsSet,localHasCompositeGlyphs);
hasCompositeGlyphs |= localHasCompositeGlyphs;
}
if(hasCompositeGlyphs)
{
UIntSet::iterator itNewGlyphs;
for(it = ioSubsetGlyphIDs.begin();it != ioSubsetGlyphIDs.end(); ++it)
glyphsSet.insert(*it);
ioSubsetGlyphIDs.clear();
for(itNewGlyphs = glyphsSet.begin(); itNewGlyphs != glyphsSet.end(); ++itNewGlyphs)
ioSubsetGlyphIDs.push_back(*itNewGlyphs);
sort(ioSubsetGlyphIDs.begin(),ioSubsetGlyphIDs.end());
}
return status;
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:29,代码来源:CFFEmbeddedFontWriter.cpp
示例9: WriteGlyf
EStatusCode TrueTypeEmbeddedFontWriter::WriteGlyf(const UIntVector& inSubsetGlyphIDs,unsigned long* inLocaTable)
{
// k. write the glyphs table. you only need to write the glyphs you are actually using.
// while at it...update the locaTable
TableEntry* tableEntry = mTrueTypeInput.GetTableEntry("glyf");
LongFilePositionType startTableOffset = mFontFileStream.GetCurrentPosition();
UIntVector::const_iterator it = inSubsetGlyphIDs.begin();
OutputStreamTraits streamCopier(&mFontFileStream);
unsigned short glyphIndex,previousGlyphIndexEnd = 0;
inLocaTable[0] = 0;
EStatusCode status = eSuccess;
for(;it != inSubsetGlyphIDs.end() && eSuccess == status; ++it)
{
glyphIndex = *it;
if(glyphIndex >= mTrueTypeInput.mMaxp.NumGlyphs)
{
TRACE_LOG2("TrueTypeEmbeddedFontWriter::WriteGlyf, error, requested glyph index %ld is larger than the maximum glyph index for this font which is %ld. ",glyphIndex,mTrueTypeInput.mMaxp.NumGlyphs-1);
status = eFailure;
break;
}
for(unsigned short i= previousGlyphIndexEnd + 1; i<=glyphIndex;++i)
inLocaTable[i] = inLocaTable[previousGlyphIndexEnd];
if(mTrueTypeInput.mGlyf[glyphIndex] != NULL)
{
mTrueTypeFile.GetInputStream()->SetPosition(tableEntry->Offset +
mTrueTypeInput.mLoca[glyphIndex]);
streamCopier.CopyToOutputStream(mTrueTypeFile.GetInputStream(),
mTrueTypeInput.mLoca[(glyphIndex) + 1] - mTrueTypeInput.mLoca[glyphIndex]);
}
inLocaTable[glyphIndex + 1] = (unsigned long)(mFontFileStream.GetCurrentPosition() - startTableOffset);
previousGlyphIndexEnd = glyphIndex + 1;
}
LongFilePositionType endOfTable = mFontFileStream.GetCurrentPosition();
mPrimitivesWriter.PadTo4();
LongFilePositionType endOfStream = mFontFileStream.GetCurrentPosition();
// write table entry data, which includes movement
WriteTableEntryData(mGLYFEntryWritingOffset,
startTableOffset,
(unsigned long)(endOfTable - startTableOffset));
// restore position to end of stream
mFontFileStream.SetPosition(endOfStream);
return mPrimitivesWriter.GetInternalState();
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:50,代码来源:TrueTypeEmbeddedFontWriter.cpp
示例10: DetermineFDArrayIndexes
void CFFEmbeddedFontWriter::DetermineFDArrayIndexes(const UIntVector& inSubsetGlyphIDs,FontDictInfoToByteMap& outNewFontDictsIndexes)
{
UIntVector::const_iterator itGlyphs = inSubsetGlyphIDs.begin();
FontDictInfoSet fontDictInfos;
for(; itGlyphs != inSubsetGlyphIDs.end(); ++itGlyphs)
if(mOpenTypeInput.mCFF.mTopDictIndex[0].mFDSelect[*itGlyphs])
fontDictInfos.insert(mOpenTypeInput.mCFF.mTopDictIndex[0].mFDSelect[*itGlyphs]);
FontDictInfoSet::iterator itFontInfos;
Byte i=0;
for(itFontInfos = fontDictInfos.begin(); itFontInfos != fontDictInfos.end(); ++itFontInfos,++i)
outNewFontDictsIndexes.insert(FontDictInfoToByteMap::value_type(*itFontInfos,i));
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:15,代码来源:CFFEmbeddedFontWriter.cpp
示例11: getTargetsInRange
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);
}
}
开发者ID:kinfung0602,项目名称:ogre-tower-defense,代码行数:46,代码来源:TowerTemporal.cpp
示例12: Nearest
UIntVector KNearest::Nearest(const RealCoord &state,
const RealCoordVector &state_set) const {
UIntVector neighbors;
std::size_t state_num = state_set.size();
if (state_num <= k_) {
for (unsigned i = 0; i < state_num; ++i) {
neighbors.push_back(i);
}
} else {
double *dist = new double[state_num];
for (unsigned i = 0; i < state_num; ++i) {
dist[i] = metric_->Distance(state, state_set[i]);
}
for (unsigned i = 0; i <= k_; ++i) {
neighbors.push_back(i);
}
for (unsigned i = 1; i < k_; ++i) {
double di = dist[i];
unsigned j = i - 1;
while (j != std::numeric_limits<unsigned>::max() && dist[i] < dist[j]) {
dist[j + 1] = dist[j];
neighbors[j + 1] = neighbors[j];
--j;
}
dist[j + 1] = di;
neighbors[j + 1] = i;
}
for (unsigned i = k_; i < state_num; ++i) {
double di = dist[i];
unsigned j = k_ - 1;
while (j != std::numeric_limits<unsigned>::max() && dist[i] < dist[j]) {
dist[j + 1] = dist[j];
neighbors[j + 1] = neighbors[j];
--j;
}
neighbors[j + 1] = i;
}
delete[] dist;
}
neighbors.pop_back();
return neighbors;
}
开发者ID:snailcoder,项目名称:PASS,代码行数:42,代码来源:KNearest.cpp
示例13: calc_pivot
char WaveletTree::calc_pivot(const std::string& alph, const CharIntMap& counts) {
UIntVector scores;
scores.resize(alph.size(), 0);
for (std::size_t i = 0; i < alph.size(); i++) {
// calc the number of 0s and 1s
UInt sum_before = 0;
UInt sum_after = 0;
for (std::size_t j = 0; j < i; j++) {
// operator[] can't be used in const map, so I had to use
// find to get iterator
CharIntMap::const_iterator elem = counts.find(alph[j]);
if (elem == counts.end())
throw std::runtime_error("counts has missing key");
sum_before += elem->second;
}
for (std::size_t j = i; j < alph.size(); j++) {
CharIntMap::const_iterator elem = counts.find(alph[j]);
if (elem == counts.end())
throw std::runtime_error("counts has missing key");
sum_after += elem->second;
}
// diff between numbers of 0s and 1s
scores[i] = abs(sum_before - sum_after);
// if current score is worse than prev, than prev is the best,
// continuing will only give worse scores
if (i > 0 && scores[i] > scores[i-1])
return alph[i-1];
}
return alph[alph.size() - 1];
}
开发者ID:iborko,项目名称:fmindex,代码行数:36,代码来源:WaveletTree.cpp
示例14: AddDependentGlyphs
void TrueTypeEmbeddedFontWriter::AddDependentGlyphs(UIntVector& ioSubsetGlyphIDs)
{
UIntSet glyphsSet;
UIntVector::iterator it = ioSubsetGlyphIDs.begin();
bool hasCompositeGlyphs = false;
for(;it != ioSubsetGlyphIDs.end(); ++it)
hasCompositeGlyphs |= AddComponentGlyphs(*it,glyphsSet);
if(hasCompositeGlyphs)
{
UIntSet::iterator itNewGlyphs;
for(it = ioSubsetGlyphIDs.begin();it != ioSubsetGlyphIDs.end(); ++it)
glyphsSet.insert(*it);
ioSubsetGlyphIDs.clear();
for(itNewGlyphs = glyphsSet.begin(); itNewGlyphs != glyphsSet.end(); ++itNewGlyphs)
ioSubsetGlyphIDs.push_back(*itNewGlyphs);
sort(ioSubsetGlyphIDs.begin(),ioSubsetGlyphIDs.end());
}
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:23,代码来源:TrueTypeEmbeddedFontWriter.cpp
示例15: main
int main()
{
// Några saker som ska fungera:
UIntVector a(10); // initiering med 7 element
std::cout << "a(10)"<< a.length << std::endl;
std::cout << "kopiering" << std::endl;
UIntVector b(a); // kopieringskonstruktor
std::cout << "kopiering" << std::endl;
a = a;
std::cout << "slut" << std::endl;
UIntVector c = a; // kopieringskonstruktor
//Extra tester för alla Requirments
a = b; // tilldelning genom kopiering
a[5] = 7; // tilldelning till element
const UIntVector e(100000); // konstant objekt med 10 element
int i = e[5]; // const int oper[](int) const körs
i = a[0]; // vektorn är nollindexerad
i = a[5]; // int oper[](int) körs
a[5]++; // öka värdet till 8
//Extra tester för alla Requirments
std::cout << "(1)TEST" << std::endl;
int aa = e[9];
int ab = e[0];
std::cout << "(1)SLUT" << aa << ab << std::endl;
std::cout << "(2)TEST" << std::endl;
for(long int i = 0; i < 100000; i++)
{
e[i];
}
std::cout << "(2)SLUT" << std::endl;
std::cout << "(3)TEST" << std::endl;
UIntVector a3(10); UIntVector b3(0); UIntVector c3(0);
b3 = a3;
a3 = c3;
std::cout << "(3)SLUT" << std::endl;
std::cout << "(4) START" << std::endl;
std::initializer_list<unsigned int> list = {1,2,3};
UIntVector a4(list); UIntVector b4(0);
a4 = b4;
std::cout << "length a" << a4.size() << "len b " << b4.size() << std::endl;
std::cout << "(4) SLUT" << std::endl;
std::cout << "(5)TEST" << std::endl;
UIntVector b5(list);
UIntVector a5(std::move(b5));
std::cout << "(5)SLUT" << std::endl;
std::cout << "(6)TEST" << std::endl;
UIntVector a6(30);
UIntVector b6(a6);
std::cout << "(6)SLUT" << std::endl;
std::cout << "(7)TEST" << std::endl;
UIntVector a7(1);
std::cout << "a) len innan " <<a7.length << std::endl;
UIntVector b7(std::move(a7));
std::cout << "b) len " <<b7.length << std::endl;
std::cout << "a) len " <<a7.length << std::endl;
std::cout << "(7)SLUT" << std::endl;
std::cout << "(8)TEST" << std::endl;
UIntVector a8(10);
a8.reset();
UIntVector b8(11);
std::cout << "a) INNAN len " <<a8.size() << "ptr " << a8.vector_ptr <<std::endl;
UIntVector c8(std::move(a8));
std::cout << "c) len " <<c8.size() << "ptr" << c8.vector_ptr <<std::endl;
std::cout << "a) len " <<a8.size() << "ptr " << a8.vector_ptr <<std::endl;
std::cout << "(8)SLUT" << std::endl;
std::cout << "(9)TEST COPY TO SELF" << std::endl;
b8 = b8;
std::cout << "(9)SLUT" << std::endl;
try {
i = e[10]; // försöker hämta element som ligger utanför e
} catch (std::out_of_range e) {
std::cout << e.what() << std::endl;
}
//.........这里部分代码省略.........
开发者ID:TobiasLundin,项目名称:Cpp,代码行数:101,代码来源:test_vec.cpp
示例16: ai_assert
// ------------------------------------------------------------------------------------------------
// 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])];
//.........这里部分代码省略.........
开发者ID:1vanK,项目名称:Urho3D,代码行数:101,代码来源:Subdivision.cpp
示例17: AddDependentGlyphs
EStatusCode Type1ToCFFEmbeddedFontWriter::CreateCFFSubset(
FreeTypeFaceWrapper& inFontInfo,
const UIntVector& inSubsetGlyphIDs,
const std::string& inSubsetFontName,
bool& outNotEmbedded,
MyStringBuf& outFontProgram)
{
EStatusCode status;
do
{
UIntVector subsetGlyphIDs = inSubsetGlyphIDs;
StringVector subsetGlyphNames;
if(subsetGlyphIDs.front() != 0) // make sure 0 glyph is in
subsetGlyphIDs.insert(subsetGlyphIDs.begin(),0);
status = mType1File.OpenFile(inFontInfo.GetFontFilePath());
if(status != PDFHummus::eSuccess)
{
TRACE_LOG1("Type1ToCFFEmbeddedFontWriter::CreateCFFSubset, cannot open Type 1 font file at %s",inFontInfo.GetFontFilePath().c_str());
break;
}
status = mType1Input.ReadType1File(mType1File.GetInputStream());
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("Type1ToCFFEmbeddedFontWriter::CreateCFFSubset, failed to read Type 1 file");
break;
}
// see if font may be embedded
if(mType1Input.mFontDictionary.FSTypeValid || mType1Input.mFontInfoDictionary.FSTypeValid)
{
if(!FSType(
mType1Input.mFontInfoDictionary.FSTypeValid ?
mType1Input.mFontInfoDictionary.fsType :
mType1Input.mFontDictionary.fsType).CanEmbed())
{
outNotEmbedded = true;
return PDFHummus::eSuccess;
}
else
outNotEmbedded = false;
}
else
outNotEmbedded = false;
// Found big gap between FreeType indexing and the way it's in the Type 1. obvioulsy due to encoding differences.
// So i'm replacing the indexes of free type, with names...should be safer (also cleans up invalid glyph ids, in case
// direct glyphs placement put them here)
TranslateFromFreeTypeToType1(inFontInfo,subsetGlyphIDs,subsetGlyphNames);
status = AddDependentGlyphs(subsetGlyphNames);
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("Type1ToCFFEmbeddedFontWriter::CreateCFFSubset, failed to add dependent glyphs");
break;
}
mFontFileStream.Assign(&outFontProgram);
mPrimitivesWriter.SetStream(&mFontFileStream);
status = WriteCFFHeader();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("Type1ToCFFEmbeddedFontWriter::CreateCFFSubset, failed to write CFF header");
break;
}
status = WriteName(inSubsetFontName);
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("Type1ToCFFEmbeddedFontWriter::CreateCFFSubset, failed to write CFF Name");
break;
}
status = WriteTopIndex();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("Type1ToCFFEmbeddedFontWriter::CreateCFFSubset, failed to write Top Index");
break;
}
// prepraring charset happens here, so that any added strings to the string index will happen...before
// the index is written
PrepareCharSetArray(subsetGlyphNames);
status = WriteStringIndex();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("Type1ToCFFEmbeddedFontWriter::CreateCFFSubset, failed to write String Index");
break;
}
status = WriteGlobalSubrsIndex();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("Type1ToCFFEmbeddedFontWriter::CreateCFFSubset, failed to write global subrs index");
//.........这里部分代码省略.........
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:101,代码来源:Type1ToCFFEmbeddedFontWriter.cpp
示例18: TRACE_LOG1
EStatusCode CFFEmbeddedFontWriter::CreateCFFSubset(
FreeTypeFaceWrapper& inFontInfo,
const UIntVector& inSubsetGlyphIDs,
UShortVector* inCIDMapping,
const std::string& inSubsetFontName,
bool& outNotEmbedded,
MyStringBuf& outFontProgram)
{
EStatusCode status;
do
{
status = mOpenTypeFile.OpenFile(inFontInfo.GetFontFilePath());
if(status != PDFHummus::eSuccess)
{
TRACE_LOG1("CFFEmbeddedFontWriter::CreateCFFSubset, cannot open type font file at %s",inFontInfo.GetFontFilePath().c_str());
break;
}
status = mOpenTypeInput.ReadOpenTypeFile(mOpenTypeFile.GetInputStream(),(unsigned short)inFontInfo.GetFontIndex());
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("CFFEmbeddedFontWriter::CreateCFFSubset, failed to read true type file");
break;
}
if(mOpenTypeInput.GetOpenTypeFontType() != EOpenTypeCFF)
{
TRACE_LOG("CFFEmbeddedFontWriter::CreateCFFSubset, font file is not CFF, so there is an exceptions here. expecting CFFs only");
break;
}
// see if font may be embedded
if(mOpenTypeInput.mOS2Exists && !FSType(mOpenTypeInput.mOS2.fsType).CanEmbed())
{
outNotEmbedded = true;
return PDFHummus::eSuccess;
}
else
outNotEmbedded = false;
UIntVector subsetGlyphIDs = inSubsetGlyphIDs;
if(subsetGlyphIDs.front() != 0) // make sure 0 glyph is in
subsetGlyphIDs.insert(subsetGlyphIDs.begin(),0);
status = AddDependentGlyphs(subsetGlyphIDs);
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("CFFEmbeddedFontWriter::CreateCFFSubset, failed to add dependent glyphs");
break;
}
mIsCID = mOpenTypeInput.mCFF.mTopDictIndex[0].mTopDict.find(scROS) !=
mOpenTypeInput.mCFF.mTopDictIndex[0].mTopDict.end();
mFontFileStream.Assign(&outFontProgram);
mPrimitivesWriter.SetStream(&mFontFileStream);
status = WriteCFFHeader();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("CFFEmbeddedFontWriter::CreateCFFSubset, failed to write CFF header");
break;
}
status = WriteName(inSubsetFontName);
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("CFFEmbeddedFontWriter::CreateCFFSubset, failed to write CFF Name");
break;
}
status = WriteTopIndex();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("CFFEmbeddedFontWriter::CreateCFFSubset, failed to write Top Index");
break;
}
status = WriteStringIndex();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("CFFEmbeddedFontWriter::CreateCFFSubset, failed to write String Index");
break;
}
status = WriteGlobalSubrsIndex();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("CFFEmbeddedFontWriter::CreateCFFSubset, failed to write global subrs index");
break;
}
status = WriteEncodings(inSubsetGlyphIDs);
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("CFFEmbeddedFontWriter::CreateCFFSubset, failed to write encodings");
break;
}
//.........这里部分代码省略.........
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:101,代码来源:CFFEmbeddedFontWriter.cpp
示例19: CreateTrueTypeSubset
EStatusCode TrueTypeEmbeddedFontWriter::CreateTrueTypeSubset( FreeTypeFaceWrapper& inFontInfo, /*consider requiring only the file path...actually i don't need the whole thing*/
const UIntVector& inSubsetGlyphIDs,
bool& outNotEmbedded,
MyStringBuf& outFontProgram)
{
EStatusCode status;
unsigned long* locaTable = NULL;
do
{
UIntVector subsetGlyphIDs = inSubsetGlyphIDs;
status = mTrueTypeFile.OpenFile(inFontInfo.GetFontFilePath());
if(status != PDFHummus::eSuccess)
{
TRACE_LOG1("TrueTypeEmbeddedFontWriter::CreateTrueTypeSubset, cannot open true type font file at %s",inFontInfo.GetFontFilePath().c_str());
break;
}
status = mTrueTypeInput.ReadOpenTypeFile(mTrueTypeFile.GetInputStream(),(unsigned short)inFontInfo.GetFontIndex());
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("TrueTypeEmbeddedFontWriter::CreateTrueTypeSubset, failed to read true type file");
break;
}
if(mTrueTypeInput.GetOpenTypeFontType() != EOpenTypeTrueType)
{
TRACE_LOG("TrueTypeEmbeddedFontWriter::CreateTrueTypeSubset, font file is not true type, so there is an exceptions here. expecting true types only");
break;
}
// see if font may be embedded
if(mTrueTypeInput.mOS2Exists && !FSType(mTrueTypeInput.mOS2.fsType).CanEmbed())
{
outNotEmbedded = true;
return PDFHummus::eSuccess;
}
else
outNotEmbedded = false;
AddDependentGlyphs(subsetGlyphIDs);
// K. this needs a bit explaining.
// i want to leave the glyph IDs as they were in the original font.
// this allows me to write a more comfotable font definition. something which is generic enough
// this assumption requires that the font will contain the glyphs in their original position
// to allow that, when the glyph count is smaller than the actual glyphs count, i'm
// padding with 0 length glyphs (their loca entries just don't move).
// don't worry - it's perfectly kosher.
// so - bottom line - the glyphs count will actually be 1 more than the maxium glyph index.
// and from here i'll just place the glyphs in their original indexes, and fill in the
// vacant glyphs with empties.
mSubsetFontGlyphsCount = subsetGlyphIDs.back() + 1;
mFontFileStream.Assign(&outFontProgram);
mPrimitivesWriter.SetOpenTypeStream(&mFontFileStream);
// assign also to some reader streams, so i can read items for checksums calculations
mFontFileReaderStream.Assign(&outFontProgram);
mPrimitivesReader.SetOpenTypeStream(&mFontFileReaderStream);
status = WriteTrueTypeHeader();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("TrueTypeEmbeddedFontWriter::CreateTrueTypeSubset, failed to write true type header");
break;
}
status = WriteHead();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("TrueTypeEmbeddedFontWriter::CreateTrueTypeSubset, failed to write head table");
break;
}
status = WriteHHea();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("TrueTypeEmbeddedFontWriter::CreateTrueTypeSubset, failed to write hhea table");
break;
}
status = WriteHMtx();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("TrueTypeEmbeddedFontWriter::CreateTrueTypeSubset, failed to write hmtx table");
break;
}
status = WriteMaxp();
if(status != PDFHummus::eSuccess)
{
TRACE_LOG("TrueTypeEmbeddedFontWriter::CreateTrueTypeSubset, failed to write Maxp table");
break;
}
if(mTrueTypeInput.mCVTExists)
{
//.........这里部分代码省略.........
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:101,代码来源:TrueTypeEmbeddedFontWriter.cpp
示例20: 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", "+", "-", "*", "/", "=", "<", ">", "|
|
请发表评论