| | |
| | | bool full(); |
| | | bool empty(); |
| | | |
| | | int push(const ELEM_T &a_data, const struct timespec *timeout=NULL, int flag=0); |
| | | int pop(ELEM_T &a_data, const struct timespec *timeout=NULL, int flag=0); |
| | | int push(const ELEM_T &a_data, const struct timespec *timeout = NULL, int flag = 0); |
| | | int pop(ELEM_T &a_data, const struct timespec *timeout = NULL, int flag = 0); |
| | | |
| | | ELEM_T &operator[](unsigned i); |
| | | |
| | |
| | | |
| | | template <typename ELEM_T> SHMQueue<ELEM_T>::~SHMQueue() { |
| | | LoggerFactory::getLogger()->debug("SHMQueue destroy"); |
| | | if(owner) { |
| | | delete queue; |
| | | hashtable_remove(hashtable, mkey); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | template <typename ELEM_T> |
| | | bool SHMQueue<ELEM_T>::bind(int key, bool force) { |
| | | |
| | | |
| | | hashtable_lock(hashtable); |
| | | void *tmp_ptr = hashtable_get(hashtable, key); |
| | | if (tmp_ptr == NULL || tmp_ptr == (void *)1 || force) { |
| | | queue = new LockFreeQueue<ELEM_T, SHM_Allocator>(mqsize); |
| | | hashtable_put(hashtable, key, (void *)queue); |
| | | mkey = key; |
| | | owner = true; |
| | | hashtable_unlock(hashtable); |
| | | return true; |
| | | } |
| | | |
| | | hashtable_unlock(hashtable); |
| | | return false; |
| | | } |
| | | |