From 9c700c5876acb50bbaf910049f6a9535bb6327f4 Mon Sep 17 00:00:00 2001 From: pescuma Date: Tue, 20 May 2008 23:53:15 +0000 Subject: Added some new methods to Buffer and ContactAsyncQueue git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@107 c086bb3d-8645-0410-b8da-73a8550f86e7 --- Plugins/utils/ContactAsyncQueue.cpp | 17 ++++++++++++---- Plugins/utils/ContactAsyncQueue.h | 2 ++ Plugins/utils/mir_buffer.h | 40 +++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 4 deletions(-) (limited to 'Plugins/utils') diff --git a/Plugins/utils/ContactAsyncQueue.cpp b/Plugins/utils/ContactAsyncQueue.cpp index 7be4cfe..ca6bf83 100644 --- a/Plugins/utils/ContactAsyncQueue.cpp +++ b/Plugins/utils/ContactAsyncQueue.cpp @@ -48,12 +48,11 @@ ContactAsyncQueue::ContactAsyncQueue(pfContactAsyncQueueCallback fContactAsyncQu ContactAsyncQueue::~ContactAsyncQueue() { - if (finished == 0) - finished = 1; - SetEvent(hEvent); + Finish(); + int count = 0; while(finished != 2 && ++count < 50) - Sleep(10); + Sleep(30); for (int i = 0; i < queue.getCount(); i++) if (queue[i] != NULL) @@ -62,6 +61,13 @@ ContactAsyncQueue::~ContactAsyncQueue() DeleteCriticalSection(&cs); } +void ContactAsyncQueue::Finish() +{ + if (finished == 0) + finished = 1; + SetEvent(hEvent); +} + void ContactAsyncQueue::Lock() { EnterCriticalSection(&cs); @@ -170,6 +176,9 @@ void ContactAsyncQueue::Thread() { ResetEvent(hEvent); + if (finished) + break; + Lock(); if (queue.getCount() <= 0) diff --git a/Plugins/utils/ContactAsyncQueue.h b/Plugins/utils/ContactAsyncQueue.h index a19ba04..fe1032f 100644 --- a/Plugins/utils/ContactAsyncQueue.h +++ b/Plugins/utils/ContactAsyncQueue.h @@ -48,6 +48,8 @@ public: ContactAsyncQueue(pfContactAsyncQueueCallback fContactAsyncQueueCallback, int initialSize = 10); ~ContactAsyncQueue(); + void Finish(); + inline int Size() const { return queue.getCount(); } inline int Remove(int idx) { mir_free(queue[idx]); return queue.remove(idx); } inline QueueItem* Get(int idx) const { return queue[idx]; } diff --git a/Plugins/utils/mir_buffer.h b/Plugins/utils/mir_buffer.h index 51398bd..4daf01e 100644 --- a/Plugins/utils/mir_buffer.h +++ b/Plugins/utils/mir_buffer.h @@ -174,6 +174,17 @@ class Buffer len++; } + void appendn(size_t n, T app) + { + alloc(len + n); + + for(; n > 0; n--) + { + str[len] = app; + len++; + } + } + void append(const char *app, size_t appLen = -1) { if (appLen == -1) @@ -198,6 +209,28 @@ class Buffer len += appLen; } + void append(const Buffer &app) + { + size_t appLen = app.len; + + size_t total = len + appLen + 1; + alloc(total); + + __bcopy(&str[len], app.str, appLen); + len += appLen; + } + + void append(const Buffer &app) + { + size_t appLen = app.len; + + size_t total = len + appLen + 1; + alloc(total); + + __bcopy(&str[len], app.str , appLen); + len += appLen; + } + void appendPrintf(const T *app, ...) { size_t total = len + 512; @@ -256,6 +289,13 @@ class Buffer len += appLen - oldLen; } + void replaceAll(T find, T replace) + { + for(size_t i = 0; i < len; i++) + if (str[len] == find) + str[len] = replace; + } + void translate() { if (str == NULL || len == 0) -- cgit v1.2.3