1 /* 2 vectorbuffer.cpp 3 yet another circle buffer 4 5 Markus Mertama 6 */ 7 8 #include"vectorbuffer.h" 9 10 11 12 void VectorPanic(TInt aErr, TInt aLine) 13 { 14 TBuf<64> b; 15 b.Format(_L("vector buffer at % d "), aLine); 16 User::Panic(b, aErr); 17 } 18 19 void TNodeBuffer::TNode::Terminator(TNodeBuffer::TNode* aNode) 20 { 21 Mem::Copy(iSucc, &aNode, sizeof(TNode*)); 22 } 23 24 TInt TNodeBuffer::TNode::Size() const 25 { 26 return reinterpret_cast<const TUint8*>(iSucc) - Ptr(); 27 } 28 29 const TUint8* TNodeBuffer::TNode::Ptr() const 30 { 31 return reinterpret_cast<const TUint8*>(this) + sizeof(TNode); 32 } 33 34 TNodeBuffer::TNode* TNodeBuffer::TNode::Empty(TUint8* aBuffer) 35 { 36 TNode* node = reinterpret_cast<TNode*>(aBuffer); 37 node->iSucc = node + 1; 38 return node; 39 } 40 41 TNodeBuffer::TNode* TNodeBuffer::TNode::New(TNode* aPred, const TDesC8& aData) 42 { 43 TNode* node = aPred->Size() == 0 ? aPred : aPred->iSucc; 44 45 46 TUint8* start = reinterpret_cast<TUint8*>(node) + sizeof(TNode); 47 node->iSucc = reinterpret_cast<TNode*>(start + aData.Size()); 48 node->iSucc->iSucc = NULL; //terminator 49 50 __ASSERT_DEBUG(node->Size() == aData.Size(), VECPANIC(KErrCorrupt)); 51 52 Mem::Copy(start, aData.Ptr(), aData.Size()); 53 return node; 54 } 55 56 57 58 59 60 61 62