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