static int mos_put_queue_msg(void *msgq, const void *msg) { int result = MOS_FAIL; MOS_ASSERT(MOS_NULL != MOS_MSGQ); MOS_ASSERT(MOS_NULL != msg); if ((MOS_NULL != MOS_MSGQ) && (MOS_NULL != msg)) { if (MOS_NULL != MOS_MSGQ_ARRAY) { if (MOS_MSGQ_COUNT < MOS_MSGQ_LENGTH) { mos_memcpy(MOS_MSGQ_TAIL, msg, MOS_MSGQ_SIZE); MOS_MSGQ_TAIL += MOS_MSGQ_SIZE; if (MOS_MSGQ_TAIL >= MOS_MSGQ_ARRAY_TAIL) { MOS_MSGQ_TAIL = MOS_MSGQ_ARRAY; } MOS_MSGQ_COUNT++; result = MOS_SUCCESS; } else { mos_send_notify(MOS_NOTIFY_MSGQ_FULL); } } } return result; }
mos_METHOD(map,clone) { mos_map *m; mos_map_slot *v; m = mos_REFT(mos_clone(mos_MIMPL), mos_map); v = mos_malloc(sizeof(m->_m_slots[0]) * (m->_m_nslots + 1)); mos_memcpy(v, V, sizeof(V[0]) * (L + 1)); m->_m_slots = v; mos_return(mos_MAKE_REF(m)); }
mos_METHOD_END mos_METHOD(map,clone) { void *v; mos_MIMPL = mos_clone(mos_MIMPL); v = mos_malloc(sizeof(V[0]) * (L + 1)); mos_memcpy(v, V, sizeof(V[0]) * (L + 1)); M = &(mos_REFT(mos_MIMPL,mos_mapobj)->_m); V = v; mos_return(mos_MIMPL); }
static int mos_get_queue_msg(void *msgq, void *msg) { int result = MOS_FAIL; MOS_ASSERT(MOS_NULL != MOS_MSGQ); MOS_ASSERT(MOS_NULL != msg); if ((MOS_NULL != MOS_MSGQ) && (MOS_NULL != msg)) { if (MOS_NULL != MOS_MSGQ_ARRAY) { if (MOS_MSGQ_COUNT > 0) { mos_memcpy(msg, MOS_MSGQ_HEAD, MOS_MSGQ_SIZE); MOS_MSGQ_HEAD += MOS_MSGQ_SIZE; if (MOS_MSGQ_HEAD >= MOS_MSGQ_ARRAY_TAIL) { MOS_MSGQ_HEAD = MOS_MSGQ_ARRAY; } MOS_MSGQ_COUNT--; result = MOS_SUCCESS; } } } return result; }