Rizin
unix-like reverse engineering framework and cli tools
CircularBuffer.cs
Go to the documentation of this file.
1 //
2 // © Copyright Henrik Ravn 2004
3 //
4 // Use, modification and distribution are subject to the Boost Software License, Version 1.0.
5 // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 
8 using System;
9 using System.Diagnostics;
10 
11 namespace DotZLib
12 {
13 
17  internal class CircularBuffer
18  {
19  #region Private data
20  private int _capacity;
21  private int _head;
22  private int _tail;
23  private int _size;
24  private byte[] _buffer;
25  #endregion
26 
27  public CircularBuffer(int capacity)
28  {
29  Debug.Assert( capacity > 0 );
30  _buffer = new byte[capacity];
31  _capacity = capacity;
32  _head = 0;
33  _tail = 0;
34  _size = 0;
35  }
36 
37  public int Size { get { return _size; } }
38 
39  public int Put(byte[] source, int offset, int count)
40  {
41  Debug.Assert( count > 0 );
42  int trueCount = Math.Min(count, _capacity - Size);
43  for (int i = 0; i < trueCount; ++i)
45  _tail += trueCount;
46  _tail %= _capacity;
47  _size += trueCount;
48  return trueCount;
49  }
50 
51  public bool Put(byte b)
52  {
53  if (Size == _capacity) // no room
54  return false;
55  _buffer[_tail++] = b;
56  _tail %= _capacity;
57  ++_size;
58  return true;
59  }
60 
61  public int Get(byte[] destination, int offset, int count)
62  {
63  int trueCount = Math.Min(count,Size);
64  for (int i = 0; i < trueCount; ++i)
65  destination[offset + i] = _buffer[(_head+i) % _capacity];
66  _head += trueCount;
67  _head %= _capacity;
68  _size -= trueCount;
69  return trueCount;
70  }
71 
72  public int Get()
73  {
74  if (Size == 0)
75  return -1;
76 
77  int result = (int)_buffer[_head++ % _capacity];
78  --_size;
79  return result;
80  }
81 
82  }
83 }
lzma_index ** i
Definition: index.h:629
This class implements a circular buffer
int Put(byte[] source, int offset, int count)
int Get(byte[] destination, int offset, int count)
CircularBuffer(int capacity)
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void count
Definition: sflib.h:98
voidpf uLong offset
Definition: ioapi.h:144
const char * source
Definition: lz4.h:699
static int
Definition: sfsocketcall.h:114
#define b(i)
Definition: sha256.c:42