19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall vectorbuffer.cpp 39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall yet another circle buffer 49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Markus Mertama 69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall*/ 79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include"vectorbuffer.h" 99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid VectorPanic(TInt aErr, TInt aLine) 139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBuf<64> b; 159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall b.Format(_L("vector buffer at % d "), aLine); 169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::Panic(b, aErr); 179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TNodeBuffer::TNode::Terminator(TNodeBuffer::TNode* aNode) 209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::Copy(iSucc, &aNode, sizeof(TNode*)); 229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt TNodeBuffer::TNode::Size() const 259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return reinterpret_cast<const TUint8*>(iSucc) - Ptr(); 279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallconst TUint8* TNodeBuffer::TNode::Ptr() const 309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return reinterpret_cast<const TUint8*>(this) + sizeof(TNode); 329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTNodeBuffer::TNode* TNodeBuffer::TNode::Empty(TUint8* aBuffer) 359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TNode* node = reinterpret_cast<TNode*>(aBuffer); 379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall node->iSucc = node + 1; 389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return node; 399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TNodeBuffer::TNode* TNodeBuffer::TNode::New(TNode* aPred, const TDesC8& aData) 429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TNode* node = aPred->Size() == 0 ? aPred : aPred->iSucc; 449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* start = reinterpret_cast<TUint8*>(node) + sizeof(TNode); 479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall node->iSucc = reinterpret_cast<TNode*>(start + aData.Size()); 489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall node->iSucc->iSucc = NULL; //terminator 499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall __ASSERT_DEBUG(node->Size() == aData.Size(), VECPANIC(KErrCorrupt)); 519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::Copy(start, aData.Ptr(), aData.Size()); 539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return node; 549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall