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