/* Private helper to check if a system needs init. */ static SDL_bool SDL_PrivateShouldInitSubsystem(Uint32 subsystem) { int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); SDL_assert(SDL_SubsystemRefCount[subsystem_index] < 255); return (SDL_SubsystemRefCount[subsystem_index] == 0); }
/* Private helper to increment a subsystem's ref counter. */ static void SDL_PrivateSubsystemRefCountIncr(Uint32 subsystem) { int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); SDL_assert(SDL_SubsystemRefCount[subsystem_index] < 255); ++SDL_SubsystemRefCount[subsystem_index]; }
/* Private helper to decrement a subsystem's ref counter. */ static void SDL_PrivateSubsystemRefCountDecr(Uint32 subsystem) { int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); if (SDL_SubsystemRefCount[subsystem_index] > 0) { --SDL_SubsystemRefCount[subsystem_index]; } }
/* Private helper to check if a system needs to be quit. */ static SDL_bool SDL_PrivateShouldQuitSubsystem(Uint32 subsystem) { int subsystem_index = SDL_MostSignificantBitIndex32(subsystem); if (SDL_SubsystemRefCount[subsystem_index] == 0) { return SDL_FALSE; } /* If we're in SDL_Quit, we shut down every subsystem, even if refcount * isn't zero. */ return SDL_SubsystemRefCount[subsystem_index] == 1 || SDL_bInMainQuit; }
Uint32 SDL_WasInit(Uint32 flags) { int i; int num_subsystems = SDL_arraysize(SDL_SubsystemRefCount); Uint32 initialized = 0; if (!flags) { flags = SDL_INIT_EVERYTHING; } num_subsystems = SDL_min(num_subsystems, SDL_MostSignificantBitIndex32(flags) + 1); /* Iterate over each bit in flags, and check the matching subsystem. */ for (i = 0; i < num_subsystems; ++i) { if ((flags & 1) && SDL_SubsystemRefCount[i] > 0) { initialized |= (1 << i); } flags >>= 1; } return initialized; }
int idris_SDL_mostSignificantBitIndex32(Uint32 bits) { return SDL_MostSignificantBitIndex32(bits); }