Blame view

src/gb28181/buffer.h 1.66 KB
3d2ab595   Hu Chunming   支持gb28181
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  /*******************************************************}

  {                                                       }

  {       File: buffer.h                                  }

  {       Created by Tsviatko Jongov                      }

  {       http://tsviatko.jongov.com                      }

  {       Date : 25.01.2007                               }

  {                                                       }

  {       CBuffer class.                                  }

  {                                                       }

  {*******************************************************/

  #pragma once

  #include <string.h>

  #include <malloc.h>

  

  typedef int BOOL;

  

  class CBuffer

  {

  private:	

  	char * fBuf = NULL;   // buffer for bytes  

  	int fSize;     // size of buffer  

  	int fLast;     // points after Last valid byte  

  public:

  	CBuffer(int Size)

  	{

  		fLast = 0;

  		fSize = 0;	 

  		fFirst = 0;   

  

  		if (Size > 0) 

  		{

  			fBuf = (char *)malloc(Size);

  			fSize = Size;

  		}

  	}

  

  	~CBuffer()

  	{

  		if (fBuf != NULL)

  		{

  			free(fBuf);

  			fBuf = NULL;

  		}

  	}

  

  

  	void add(char * Data, int Size)

  	{

    

  		if (fLast + Size > fSize)

  		{

  			char * tmp = (char *)malloc(fSize + Size);

  			memcpy(tmp, fBuf, fLast);

  			fSize += Size;

  			free(fBuf);

  			fBuf = tmp;

  		}

  

  		memcpy(fBuf + fLast, Data, Size);

  		fLast += Size;

  	}

  

  	void compact()

  	{

  		if (fFirst > 0)

  		{

  			int aLen = fLast - fFirst;

  			memmove(fBuf, fBuf + fFirst, aLen);

  			fFirst = 0;

  			fLast = aLen;

  		}

  	} 

  

  	void reset()

  	{

  		fFirst = 0;

  		fLast = 0;

  	}

    

  	int len()  

  	{

  		return (fLast - fFirst);  

  	}

  

  	void * head()

  	{

  		return fBuf + fFirst;

  	}

  

  	int fFirst;   

  };