summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qringbuffer_p.h
diff options
context:
space:
mode:
authorKurt Korbatits <kurt.korbatits@nokia.com>2009-11-10 03:01:07 (GMT)
committerKurt Korbatits <kurt.korbatits@nokia.com>2009-11-10 03:01:07 (GMT)
commit8df98549a4d84b5877e50318140c2041e17632fb (patch)
tree0c55d5ef4d8380ec45c6457a40b033dc45cbd579 /src/corelib/tools/qringbuffer_p.h
parentf55c317e377aaf0b3e24904e88dc1c4a6e15a20a (diff)
parent9a6de1fa0db0da8c4fa5eb904ef6d78cc619e332 (diff)
downloadQt-8df98549a4d84b5877e50318140c2041e17632fb.zip
Qt-8df98549a4d84b5877e50318140c2041e17632fb.tar.gz
Qt-8df98549a4d84b5877e50318140c2041e17632fb.tar.bz2
Merge branch '4.6' of ../qt into 4.6
Diffstat (limited to 'src/corelib/tools/qringbuffer_p.h')
-rw-r--r--src/corelib/tools/qringbuffer_p.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/corelib/tools/qringbuffer_p.h b/src/corelib/tools/qringbuffer_p.h
index c44346c..7c766cb 100644
--- a/src/corelib/tools/qringbuffer_p.h
+++ b/src/corelib/tools/qringbuffer_p.h
@@ -287,6 +287,33 @@ public:
return -1;
}
+ inline int indexOf(char c, int maxLength) const {
+ int index = 0;
+ int remain = qMin(size(), maxLength);
+ for (int i = 0; remain && i < buffers.size(); ++i) {
+ int start = 0;
+ int end = buffers.at(i).size();
+
+ if (i == 0)
+ start = head;
+ if (i == tailBuffer)
+ end = tail;
+ if (remain < end - start) {
+ end = start + remain;
+ remain = 0;
+ } else {
+ remain -= end - start;
+ }
+ const char *ptr = buffers.at(i).data() + start;
+ for (int j = start; j < end; ++j) {
+ if (*ptr++ == c)
+ return index;
+ ++index;
+ }
+ }
+ return -1;
+ }
+
inline int read(char *data, int maxLength) {
int bytesToRead = qMin(size(), maxLength);
int readSoFar = 0;