Add a new plugin / extension mechanism called a resource provider along with retrofitting VFS on top of it.

A resource provider provides a mechanism for MuJoCo to read from filesystems other than the OS filesystem or the Virtual File System (VFS).

PiperOrigin-RevId: 525394983
Change-Id: I077ff5a7e2e76806b48b6defb531280aadc8b169
This commit is contained in:
Kyle Bayes
2023-04-19 03:01:33 -07:00
committed by Copybara-Service
parent b25728cc2e
commit fe3dccfd1d
27 changed files with 1467 additions and 607 deletions
+65
View File
@@ -7374,4 +7374,69 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
),
doc='Look up a plugin by the registered slot number that was returned by mjp_registerPlugin.', # pylint: disable=line-too-long
)),
('mjp_defaultResourceProvider',
FunctionDecl(
name='mjp_defaultResourceProvider',
return_type=ValueType(name='void'),
parameters=(
FunctionParameterDecl(
name='provider',
type=PointerType(
inner_type=ValueType(name='mjpResourceProvider'),
),
),
),
doc='Set default resource provider definition.',
)),
('mjp_registerResourceProvider',
FunctionDecl(
name='mjp_registerResourceProvider',
return_type=ValueType(name='int'),
parameters=(
FunctionParameterDecl(
name='provider',
type=PointerType(
inner_type=ValueType(name='mjpResourceProvider', is_const=True), # pylint: disable=line-too-long
),
),
),
doc='Globally register a resource provider in a thread-safe manner. The provider must have a prefix that is not a sub-prefix or super-prefix of any current registered providers. This function returns a slot number > 0 on success.', # pylint: disable=line-too-long
)),
('mjp_resourceProviderCount',
FunctionDecl(
name='mjp_resourceProviderCount',
return_type=ValueType(name='int'),
parameters=(),
doc='Return the number of globally registered resource providers.',
)),
('mjp_getResourceProvider',
FunctionDecl(
name='mjp_getResourceProvider',
return_type=PointerType(
inner_type=ValueType(name='mjpResourceProvider', is_const=True),
),
parameters=(
FunctionParameterDecl(
name='resource_name',
type=PointerType(
inner_type=ValueType(name='char', is_const=True),
),
),
),
doc='Return the resource provider with the prefix that matches against the resource name. If no match, return NULL.', # pylint: disable=line-too-long
)),
('mjp_getResourceProviderAtSlot',
FunctionDecl(
name='mjp_getResourceProviderAtSlot',
return_type=PointerType(
inner_type=ValueType(name='mjpResourceProvider', is_const=True),
),
parameters=(
FunctionParameterDecl(
name='slot',
type=ValueType(name='int'),
),
),
doc='Look up a resource provider by slot number returned by mjp_registerResourceProvider. If invalid slot number, return NULL.', # pylint: disable=line-too-long
)),
])