3975
|
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 |