mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-05-25 14:09:10 +00:00
Added SDL_ClaimEventMemory()
This commit is contained in:
parent
2816745f48
commit
f95ecac300
5 changed files with 52 additions and 0 deletions
|
@ -1420,10 +1420,32 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents);
|
||||||
*
|
*
|
||||||
* \since This function is available since SDL 3.0.0.
|
* \since This function is available since SDL 3.0.0.
|
||||||
*
|
*
|
||||||
|
* \sa SDL_ClaimEventMemory
|
||||||
* \sa SDL_FreeEventMemory
|
* \sa SDL_FreeEventMemory
|
||||||
*/
|
*/
|
||||||
extern SDL_DECLSPEC void * SDLCALL SDL_AllocateEventMemory(size_t size);
|
extern SDL_DECLSPEC void * SDLCALL SDL_AllocateEventMemory(size_t size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Claim ownership of temporary event memory allocated by SDL.
|
||||||
|
*
|
||||||
|
* This function changes ownership of temporary event memory allocated for events and APIs that
|
||||||
|
* follow the SDL_GetStringRule. If this function succeeds, the memory will no longer be automatically freed by SDL, it must be freed using SDL_free() by the application.
|
||||||
|
*
|
||||||
|
* If the memory isn't temporary, or it was allocated on a different thread, this will return NULL, and the application does not have ownership of the memory.
|
||||||
|
*
|
||||||
|
* Note that even if a function follows the SDL_GetStringRule it may not be using temporary event memory, and this function will return NULL in that case.
|
||||||
|
*
|
||||||
|
* \param mem a pointer allocated with SDL_AllocateEventMemory().
|
||||||
|
* \returns a pointer to the memory now owned by the application, which must be freed using SDL_free(), or NULL if the memory is not temporary or was allocated on a different thread.
|
||||||
|
*
|
||||||
|
* \threadsafety It is safe to call this function from any thread.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 3.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_AllocateEventMemory
|
||||||
|
*/
|
||||||
|
extern SDL_DECLSPEC void * SDLCALL SDL_ClaimEventMemory(const void *mem);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Free temporary event memory allocated by SDL.
|
* Free temporary event memory allocated by SDL.
|
||||||
*
|
*
|
||||||
|
|
|
@ -29,6 +29,7 @@ SDL3_0.0.0 {
|
||||||
SDL_BlitSurfaceUncheckedScaled;
|
SDL_BlitSurfaceUncheckedScaled;
|
||||||
SDL_BroadcastCondition;
|
SDL_BroadcastCondition;
|
||||||
SDL_CaptureMouse;
|
SDL_CaptureMouse;
|
||||||
|
SDL_ClaimEventMemory;
|
||||||
SDL_CleanupTLS;
|
SDL_CleanupTLS;
|
||||||
SDL_ClearAudioStream;
|
SDL_ClearAudioStream;
|
||||||
SDL_ClearClipboardData;
|
SDL_ClearClipboardData;
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
#define SDL_BlitSurfaceUncheckedScaled SDL_BlitSurfaceUncheckedScaled_REAL
|
#define SDL_BlitSurfaceUncheckedScaled SDL_BlitSurfaceUncheckedScaled_REAL
|
||||||
#define SDL_BroadcastCondition SDL_BroadcastCondition_REAL
|
#define SDL_BroadcastCondition SDL_BroadcastCondition_REAL
|
||||||
#define SDL_CaptureMouse SDL_CaptureMouse_REAL
|
#define SDL_CaptureMouse SDL_CaptureMouse_REAL
|
||||||
|
#define SDL_ClaimEventMemory SDL_ClaimEventMemory_REAL
|
||||||
#define SDL_CleanupTLS SDL_CleanupTLS_REAL
|
#define SDL_CleanupTLS SDL_CleanupTLS_REAL
|
||||||
#define SDL_ClearAudioStream SDL_ClearAudioStream_REAL
|
#define SDL_ClearAudioStream SDL_ClearAudioStream_REAL
|
||||||
#define SDL_ClearClipboardData SDL_ClearClipboardData_REAL
|
#define SDL_ClearClipboardData SDL_ClearClipboardData_REAL
|
||||||
|
|
|
@ -74,6 +74,7 @@ SDL_DYNAPI_PROC(int,SDL_BlitSurfaceUnchecked,(SDL_Surface *a, const SDL_Rect *b,
|
||||||
SDL_DYNAPI_PROC(int,SDL_BlitSurfaceUncheckedScaled,(SDL_Surface *a, const SDL_Rect *b, SDL_Surface *c, const SDL_Rect *d, SDL_ScaleMode e),(a,b,c,d,e),return)
|
SDL_DYNAPI_PROC(int,SDL_BlitSurfaceUncheckedScaled,(SDL_Surface *a, const SDL_Rect *b, SDL_Surface *c, const SDL_Rect *d, SDL_ScaleMode e),(a,b,c,d,e),return)
|
||||||
SDL_DYNAPI_PROC(int,SDL_BroadcastCondition,(SDL_Condition *a),(a),return)
|
SDL_DYNAPI_PROC(int,SDL_BroadcastCondition,(SDL_Condition *a),(a),return)
|
||||||
SDL_DYNAPI_PROC(int,SDL_CaptureMouse,(SDL_bool a),(a),return)
|
SDL_DYNAPI_PROC(int,SDL_CaptureMouse,(SDL_bool a),(a),return)
|
||||||
|
SDL_DYNAPI_PROC(void*,SDL_ClaimEventMemory,(const void *a),(a),return)
|
||||||
SDL_DYNAPI_PROC(void,SDL_CleanupTLS,(void),(),)
|
SDL_DYNAPI_PROC(void,SDL_CleanupTLS,(void),(),)
|
||||||
SDL_DYNAPI_PROC(int,SDL_ClearAudioStream,(SDL_AudioStream *a),(a),return)
|
SDL_DYNAPI_PROC(int,SDL_ClearAudioStream,(SDL_AudioStream *a),(a),return)
|
||||||
SDL_DYNAPI_PROC(int,SDL_ClearClipboardData,(void),(),return)
|
SDL_DYNAPI_PROC(int,SDL_ClearClipboardData,(void),(),return)
|
||||||
|
|
|
@ -212,6 +212,33 @@ static void SDL_FlushEventMemory(Uint32 eventID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *SDL_ClaimEventMemory(const void *mem)
|
||||||
|
{
|
||||||
|
SDL_EventMemoryState *state;
|
||||||
|
|
||||||
|
state = SDL_GetEventMemoryState(SDL_FALSE);
|
||||||
|
if (state && mem) {
|
||||||
|
SDL_EventMemory *prev = NULL, *entry;
|
||||||
|
|
||||||
|
for (entry = state->head; entry; prev = entry, entry = entry->next) {
|
||||||
|
if (mem == entry->memory) {
|
||||||
|
if (prev) {
|
||||||
|
prev->next = entry->next;
|
||||||
|
}
|
||||||
|
if (entry == state->head) {
|
||||||
|
state->head = entry->next;
|
||||||
|
}
|
||||||
|
if (entry == state->tail) {
|
||||||
|
state->tail = prev;
|
||||||
|
}
|
||||||
|
SDL_free(entry);
|
||||||
|
return (void *)mem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void SDL_FreeEventMemory(const void *mem)
|
void SDL_FreeEventMemory(const void *mem)
|
||||||
{
|
{
|
||||||
SDL_EventMemoryState *state;
|
SDL_EventMemoryState *state;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue