Pārlūkot izejas kodu

RingBuffer: Adds find() method

Ignacio Etcheverry 8 gadi atpakaļ
vecāks
revīzija
803a54d93c
1 mainītis faili ar 26 papildinājumiem un 0 dzēšanām
  1. 26 0
      core/ring_buffer.h

+ 26 - 0
core/ring_buffer.h

@@ -101,6 +101,32 @@ public:
 		return p_size;
 	};
 
+	int find(const T &t, int p_offset, int p_max_size) {
+
+		int left = data_left();
+		if ((p_offset + p_max_size) > left) {
+			p_max_size -= left - p_offset;
+			if (p_max_size <= 0)
+				return 0;
+		}
+		p_max_size = MIN(left, p_max_size);
+		int pos = read_pos;
+		inc(pos, p_offset);
+		int to_read = p_max_size;
+		while (to_read) {
+			int end = pos + to_read;
+			end = MIN(end, size());
+			int total = end - pos;
+			for (int i = 0; i < total; i++) {
+				if (data[pos + i] == t)
+					return i + (p_max_size - to_read);
+			};
+			to_read -= total;
+			pos = 0;
+		}
+		return -1;
+	}
+
 	inline int advance_read(int p_n) {
 		p_n = MIN(p_n, data_left());
 		inc(read_pos, p_n);