Source code for libretro.api.savestate

"""Types that define serialization quirks and savestate contexts."""

from ctypes import c_int
from enum import IntEnum, IntFlag

RETRO_SERIALIZATION_QUIRK_INCOMPLETE = 1 << 0
RETRO_SERIALIZATION_QUIRK_MUST_INITIALIZE = 1 << 1
RETRO_SERIALIZATION_QUIRK_CORE_VARIABLE_SIZE = 1 << 2
RETRO_SERIALIZATION_QUIRK_FRONT_VARIABLE_SIZE = 1 << 3
RETRO_SERIALIZATION_QUIRK_SINGLE_SESSION = 1 << 4
RETRO_SERIALIZATION_QUIRK_ENDIAN_DEPENDENT = 1 << 5
RETRO_SERIALIZATION_QUIRK_PLATFORM_DEPENDENT = 1 << 6

retro_savestate_context = c_int
"""Corresponds to :c:type:`retro_savestate_context` in ``libretro.h``."""

RETRO_SAVESTATE_CONTEXT_NORMAL = 0
RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_INSTANCE = 1
RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_BINARY = 2
RETRO_SAVESTATE_CONTEXT_ROLLBACK_NETPLAY = 3
RETRO_SAVESTATE_CONTEXT_UNKNOWN = 0x7FFFFFFF


[docs] class SerializationQuirks(IntFlag): """ Flags describing quirks of a core's serialization (savestate) support. Corresponds to the ``RETRO_SERIALIZATION_QUIRK_*`` constants in ``libretro.h``. """ INCOMPLETE = RETRO_SERIALIZATION_QUIRK_INCOMPLETE """ Set by the :class:`.Core` to indicate that serialized state is incomplete in some way. The :class:`.Core` should set this bit if serialization is usable for the common case of saving and loading game state, but not for frame-sensitive frontend features such as netplay or rerecording. """ MUST_INITIALIZE = RETRO_SERIALIZATION_QUIRK_MUST_INITIALIZE """ Set by the :class:`.Core` to indicate that it must perform some initialization before :meth:`.Core.serialize` returns non-:obj:`None`. """ CORE_VARIABLE_SIZE = RETRO_SERIALIZATION_QUIRK_CORE_VARIABLE_SIZE """ Set by the :class:`.Core` to indicate that the return value of :meth:`.Core.serialize_size` may change within a single session. """ FRONTEND_VARIABLE_SIZE = RETRO_SERIALIZATION_QUIRK_FRONT_VARIABLE_SIZE """ Set by libretro.py to indicate that it supports cores that set :attr:`.CORE_VARIABLE_SIZE`. """ SINGLE_SESSION = RETRO_SERIALIZATION_QUIRK_SINGLE_SESSION """ Set by the :class:`.Core` to indicate that savestates are only valid within a single session. """ ENDIAN_DEPENDENT = RETRO_SERIALIZATION_QUIRK_ENDIAN_DEPENDENT """ Set by the :class:`.Core` to indicate that savestates can't be loaded on a platform with a different endianness than the one they were created on. """ PLATFORM_DEPENDENT = RETRO_SERIALIZATION_QUIRK_PLATFORM_DEPENDENT """ Set by the :class:`.Core` to indicate that its savestates can't be loaded on a different platform than the one they were created on for reasons besides endianness, such as pointer size or structure packing differences. """ ALL = ( INCOMPLETE | MUST_INITIALIZE | CORE_VARIABLE_SIZE | FRONTEND_VARIABLE_SIZE | SINGLE_SESSION | ENDIAN_DEPENDENT | PLATFORM_DEPENDENT )
[docs] class SavestateContext(IntEnum): """ Denotes what a savestate returned by a :class:`.Core` will be used for. Corresponds to the ``RETRO_SAVESTATE_CONTEXT_*`` constants in ``libretro.h``. """ NORMAL = RETRO_SAVESTATE_CONTEXT_NORMAL """ Standard savestate written to disk. """ RUNAHEAD_SAME_INSTANCE = RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_INSTANCE """ Denotes a savestate that is suitable for same-instance runahead. This means that you should only use the savestate within a single session and not send it to disk or across the network. """ RUNAHEAD_SAME_BINARY = RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_BINARY """ Denotes a savestate that is suitable for second-instance runahead. This means that it shouldn't contain pointers. """ ROLLBACK_NETPLAY = RETRO_SAVESTATE_CONTEXT_ROLLBACK_NETPLAY """ Denotes a savestate that is suitable for rollback netplay. Must not contain pointers, and integers must be in big-endian format. """
__all__ = [ "SerializationQuirks", "SavestateContext", "retro_savestate_context", ]