mirror of
https://github.com/N64Recomp/N64ModernRuntime.git
synced 2026-02-02 19:56:13 +00:00
use a bitset internally to reduce overhead, but keep struct of bools in public API
This commit is contained in:
parent
da43a09c9b
commit
47c364a51d
1 changed files with 11 additions and 16 deletions
|
|
@ -1,3 +1,4 @@
|
|||
#include <bitset>
|
||||
#include <thread>
|
||||
|
||||
#include "blockingconcurrentqueue.h"
|
||||
|
|
@ -13,27 +14,21 @@ struct QueuedMessage {
|
|||
};
|
||||
|
||||
static moodycamel::BlockingConcurrentQueue<QueuedMessage> external_messages {};
|
||||
static ultramodern::MessageQueueControl message_queue_control;
|
||||
std::bitset<32> requeue_enabled;
|
||||
|
||||
void ultramodern::set_message_queue_control(const ultramodern::MessageQueueControl& mqc) {
|
||||
message_queue_control = mqc;
|
||||
requeue_enabled.reset();
|
||||
requeue_enabled.set(OS_EVENT_COUNTER, mqc.requeue_counter);
|
||||
requeue_enabled.set(OS_EVENT_SP, mqc.requeue_sp);
|
||||
requeue_enabled.set(OS_EVENT_SI, mqc.requeue_si);
|
||||
requeue_enabled.set(OS_EVENT_AI, mqc.requeue_ai);
|
||||
requeue_enabled.set(OS_EVENT_VI, mqc.requeue_vi);
|
||||
requeue_enabled.set(OS_EVENT_PI, mqc.requeue_pi);
|
||||
requeue_enabled.set(OS_EVENT_DP, mqc.requeue_dp);
|
||||
}
|
||||
|
||||
void ultramodern::enqueue_external_message_type(PTR(OSMesgQueue) mq, OSMesg msg, bool jam, OSEvent event_type) {
|
||||
bool requeue_if_blocked = false;
|
||||
switch (event_type) {
|
||||
case OS_EVENT_COUNTER: requeue_if_blocked = message_queue_control.requeue_counter; break;
|
||||
case OS_EVENT_SP: requeue_if_blocked = message_queue_control.requeue_sp; break;
|
||||
case OS_EVENT_SI: requeue_if_blocked = message_queue_control.requeue_si; break;
|
||||
case OS_EVENT_AI: requeue_if_blocked = message_queue_control.requeue_ai; break;
|
||||
case OS_EVENT_VI: requeue_if_blocked = message_queue_control.requeue_vi; break;
|
||||
case OS_EVENT_PI: requeue_if_blocked = message_queue_control.requeue_pi; break;
|
||||
case OS_EVENT_DP: requeue_if_blocked = message_queue_control.requeue_dp; break;
|
||||
default:
|
||||
assert(!"unhandled OSEvent type");
|
||||
break;
|
||||
}
|
||||
external_messages.enqueue({mq, msg, jam, requeue_if_blocked});
|
||||
external_messages.enqueue({mq, msg, jam, requeue_enabled[event_type]});
|
||||
}
|
||||
|
||||
void ultramodern::enqueue_external_message(PTR(OSMesgQueue) mq, OSMesg msg, bool jam, bool requeue_if_blocked) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue