diff --git a/src/object/ObjectRepository.cpp b/src/object/ObjectRepository.cpp index 46b1b849e7..52fb222d5f 100644 --- a/src/object/ObjectRepository.cpp +++ b/src/object/ObjectRepository.cpp @@ -116,7 +116,17 @@ public: } } - const ObjectRepositoryItem * FindObject(const utf8 * name) override + const size_t GetNumObjects() const override + { + return _items.size(); + } + + const ObjectRepositoryItem * GetObjects() const override + { + return _items.data(); + } + + const ObjectRepositoryItem * FindObject(const utf8 * name) const override { rct_object_entry entry = { 0 }; utf8 entryName[9] = { ' ' }; @@ -131,7 +141,7 @@ public: return nullptr; } - const ObjectRepositoryItem * FindObject(const rct_object_entry * objectEntry) override + const ObjectRepositoryItem * FindObject(const rct_object_entry * objectEntry) const override { auto kvp = _itemMap.find(*objectEntry); if (kvp != _itemMap.end()) @@ -730,4 +740,16 @@ extern "C" } return 1; } + + size_t object_repository_get_items_count() + { + IObjectRepository * objectRepository = GetObjectRepository(); + return objectRepository->GetNumObjects(); + } + + const ObjectRepositoryItem * object_repository_get_items() + { + IObjectRepository * objectRepository = GetObjectRepository(); + return objectRepository->GetObjects(); + } } diff --git a/src/object/ObjectRepository.h b/src/object/ObjectRepository.h index 2d766fff21..ded9a2a9a8 100644 --- a/src/object/ObjectRepository.h +++ b/src/object/ObjectRepository.h @@ -18,12 +18,16 @@ #include "../common.h" +#ifdef __cplusplus extern "C" { +#endif #include "../object.h" +#ifdef __cplusplus } +#endif -struct ObjectRepositoryItem +typedef struct ObjectRepositoryItem { rct_object_entry_extended ObjectEntry; utf8 * Path; @@ -46,14 +50,19 @@ struct ObjectRepositoryItem uint8 RideType[3]; }; }; -}; +} ObjectRepositoryItem; + +#ifdef __cplusplus interface IObjectRepository { virtual ~IObjectRepository() { } - - virtual const ObjectRepositoryItem * FindObject(const utf8 * name) abstract; - virtual const ObjectRepositoryItem * FindObject(const rct_object_entry * objectEntry) abstract; + + virtual const size_t GetNumObjects() const abstract; + virtual const ObjectRepositoryItem * GetObjects() const abstract; + virtual const ObjectRepositoryItem * FindObject(const utf8 * name) const abstract; + virtual const ObjectRepositoryItem * FindObject(const rct_object_entry * objectEntry) const abstract; + virtual Object * LoadObject(const rct_object_entry * objectEntry) abstract; virtual void AddObject(const rct_object_entry * objectEntry, const void * data, @@ -61,3 +70,10 @@ interface IObjectRepository }; IObjectRepository * GetObjectRepository(); + +#else + +size_t object_repository_get_items_count(); +const ObjectRepositoryItem * object_repository_get_items(); + +#endif