SDL-1.2.14
[sdl_omap.git] / src / main / symbian / EKA2 / vectorbuffer.cpp
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