• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2     vectorbuffer.cpp
3     yet another circle buffer
4 
5     Markus Mertama
6 */
7 
8 #include"vectorbuffer.h"
9 
10 
11 
VectorPanic(TInt aErr,TInt aLine)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 
Terminator(TNodeBuffer::TNode * aNode)19 void TNodeBuffer::TNode::Terminator(TNodeBuffer::TNode* aNode)
20     {
21     Mem::Copy(iSucc, &aNode, sizeof(TNode*));
22     }
23 
Size() const24 TInt TNodeBuffer::TNode::Size() const
25     {
26     return reinterpret_cast<const TUint8*>(iSucc) - Ptr();
27     }
28 
Ptr() const29 const TUint8*  TNodeBuffer::TNode::Ptr() const
30     {
31     return reinterpret_cast<const TUint8*>(this) + sizeof(TNode);
32     }
33 
Empty(TUint8 * aBuffer)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 
New(TNode * aPred,const TDesC8 & aData)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