MessageQueue.h revision f1d8e87b09abf963cd5b6a026194c1940fadb7b4
1f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian/* 2f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * Copyright (C) 2009 The Android Open Source Project 3f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * 4f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * you may not use this file except in compliance with the License. 6f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * You may obtain a copy of the License at 7f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * 8f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * 10f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * Unless required by applicable law or agreed to in writing, software 11f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * See the License for the specific language governing permissions and 14f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * limitations under the License. 15f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian */ 16f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 17f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian#ifndef ANDROID_MESSAGE_QUEUE_H 18f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian#define ANDROID_MESSAGE_QUEUE_H 19f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 20f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian#include <stdint.h> 21f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian#include <errno.h> 22f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian#include <sys/types.h> 23f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 24f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian#include <utils/threads.h> 25f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian#include <utils/Timers.h> 26f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 27f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 28f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopiannamespace android { 29f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 30f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian// --------------------------------------------------------------------------- 31f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 32f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopiantemplate<typename NODE_PTR_TYPE> 33f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianclass DoublyLinkedList 34f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian{ 35f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianprotected: 36f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian typedef NODE_PTR_TYPE NODE_PTR; 37f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 38f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian NODE_PTR mFirst; 39f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian NODE_PTR mLast; 40f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 41f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianpublic: 42f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian class Node { 43f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian friend class DoublyLinkedList; 44f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian mutable NODE_PTR next; 45f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian mutable NODE_PTR prev; 46f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian public: 47f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian typedef NODE_PTR PTR; 48f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian inline NODE_PTR getNext() const { return next; } 49f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian inline NODE_PTR getPrev() const { return prev; } 50f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian void detach() { 51f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian prev = 0; 52f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian next = 0; 53f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 54f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian }; 55f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 56f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian DoublyLinkedList() : mFirst(0), mLast(0) { } 57f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian ~DoublyLinkedList() { } 58f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 59f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian bool isEmpty() const { return mFirst == 0; } 60f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian const NODE_PTR& head() const { return mFirst; } 61f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian const NODE_PTR& tail() const { return mLast; } 62f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian const NODE_PTR& head() { return mFirst; } 63f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian const NODE_PTR& tail() { return mLast; } 64f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 65f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian void insertAfter(const NODE_PTR& node, const NODE_PTR& newNode) { 66f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian newNode->prev = node; 67f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian newNode->next = node->next; 68f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian if (node->next == 0) mLast = newNode; 69f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian else node->next->prev = newNode; 70f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian node->next = newNode; 71f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 72f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 73f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian void insertBefore(const NODE_PTR& node, const NODE_PTR& newNode) { 74f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian newNode->prev = node->prev; 75f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian newNode->next = node; 76f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian if (node->prev == 0) mFirst = newNode; 77f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian else node->prev->next = newNode; 78f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian node->prev = newNode; 79f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 80f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 81f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian void insertHead(const NODE_PTR& newNode) { 82f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian if (mFirst == 0) { 83f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian mFirst = mLast = newNode; 84f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian newNode->prev = newNode->next = 0; 85f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } else { 86f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian newNode->prev = 0; 87f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian newNode->next = mFirst; 88f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian mFirst->prev = newNode; 89f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian mFirst = newNode; 90f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 91f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 92f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 93f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian void insertTail(const NODE_PTR& newNode) { 94f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian if (mLast == 0) { 95f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian insertHead(newNode); 96f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } else { 97f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian newNode->prev = mLast; 98f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian newNode->next = 0; 99f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian mLast->next = newNode; 100f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian mLast = newNode; 101f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 102f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 103f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 104f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian NODE_PTR remove(const NODE_PTR& node) { 105f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian if (node->prev == 0) mFirst = node->next; 106f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian else node->prev->next = node->next; 107f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian if (node->next == 0) mLast = node->prev; 108f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian else node->next->prev = node->prev; 109f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian return node; 110f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 111f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian}; 112f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 113f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian// --------------------------------------------------------------------------- 114f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 115f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopiantemplate<typename NODE_PTR_TYPE> 116f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianclass SortedList : protected DoublyLinkedList< NODE_PTR_TYPE > 117f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian{ 118f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian typedef DoublyLinkedList< NODE_PTR_TYPE > forward; 119f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianpublic: 120f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian typedef NODE_PTR_TYPE NODE_PTR; 121f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian inline bool isEmpty() const { return forward::isEmpty(); } 122f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian inline const NODE_PTR& head() const { return forward::head(); } 123f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian inline const NODE_PTR& tail() const { return forward::tail(); } 124f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian inline const NODE_PTR& head() { return forward::head(); } 125f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian inline const NODE_PTR& tail() { return forward::tail(); } 126f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian inline NODE_PTR remove(const NODE_PTR& node) { return forward::remove(node); } 127f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian void insert(const NODE_PTR& node) { 128f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian NODE_PTR l(head()); 129f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian while (l != 0) { 130f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian if (*node < *l) { 131f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian insertBefore(l, node); 132f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian return; 133f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 134f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian l = l->getNext(); 135f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 136f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian insertTail(node); 137f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian } 138f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian}; 139f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 140f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian// ============================================================================ 141f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 142f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianclass MessageBase : 143f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian public LightRefBase<MessageBase>, 144f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian public DoublyLinkedList< sp<MessageBase> >::Node 145f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian{ 146f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianpublic: 147f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian nsecs_t when; 148f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian uint32_t what; 149f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian int32_t arg0; 150f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 151f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian MessageBase(uint32_t what=0, int32_t arg0=0) 152f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian : when(0), what(what), arg0(arg0) { } 153f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 154f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian // return true if message has a handler 155f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian virtual bool handler() { return false; } 156f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 157f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianprotected: 158f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian virtual ~MessageBase() { } 159f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 160f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianprivate: 161f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian friend class LightRefBase<MessageBase>; 162f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian}; 163f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 164f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianinline bool operator < (const MessageBase& lhs, const MessageBase& rhs) { 165f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian return lhs.when < rhs.when; 166f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian} 167f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 168f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian// --------------------------------------------------------------------------- 169f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 170f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian/* 171f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian * MessageList is a sorted list of sp<MessageBase> 172f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian */ 173f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 174f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopiantypedef SortedList< MessageBase::Node::PTR > MessageList; 175f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 176f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian// --------------------------------------------------------------------------- 177f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 178f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianclass MessageQueue 179f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian{ 180f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianpublic: 181f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 182f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian // this is a work-around the multichar constant warning. A macro would 183f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian // work too, but would pollute the namespace. 184f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian template <int a, int b, int c, int d> 185f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian struct WHAT { 186f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian static const uint32_t Value = 187f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian (uint32_t(a&0xff)<<24)|(uint32_t(b&0xff)<<16)| 188f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian (uint32_t(c&0xff)<<8)|uint32_t(d&0xff); 189f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian }; 190f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 191f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian MessageQueue(); 192f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian ~MessageQueue(); 193f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 194f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian // pre-defined messages 195f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian enum { 196f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian INVALIDATE = WHAT<'_','p','d','t'>::Value 197f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian }; 198f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 199f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian MessageList::NODE_PTR waitMessage(nsecs_t timeout = -1); 200f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 201f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian status_t postMessage(const MessageList::NODE_PTR& message, 202f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian nsecs_t reltime=0, uint32_t flags = 0); 203f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 204f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian status_t invalidate(); 205f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 206f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian void dump(const MessageList::NODE_PTR& message); 207f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 208f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopianprivate: 209f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian status_t queueMessage(const MessageList::NODE_PTR& message, 210f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian nsecs_t reltime, uint32_t flags); 211f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian void dumpLocked(const MessageList::NODE_PTR& message); 212f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 213f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian Mutex mLock; 214f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian Condition mCondition; 215f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian MessageList mMessages; 216f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian bool mInvalidate; 217f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian MessageList::NODE_PTR mInvalidateMessage; 218f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian}; 219f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 220f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian// --------------------------------------------------------------------------- 221f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 222f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian}; // namespace android 223f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian 224f1d8e87b09abf963cd5b6a026194c1940fadb7b4Mathias Agopian#endif /* ANDROID_MESSAGE_QUEUE_H */ 225