Follow-up to #50 / #58, last of three stages. Depends on #59 and #60. This stage breaks source compatibility and should ship as a major version bump.
Scope
54 public headers still name a DataStructures:: type and 22 virtual methods take one as a parameter. Anyone who overrode such a virtual (plugins, CloudServer filters, ReplicaManager3/Replica3, FullyConnectedMesh2, RakPeerInterface::GetSockets) must change their signature when the type changes, so this cannot be done gradually.
Public virtuals affected include:
RakPeerInterface::GetSockets / ReleaseSockets / GetStatisticsList / GetSystemList
CloudServer::Release / Get / Unsubscribe and the CloudServerQueryFilter callbacks
FullyConnectedMesh2::GetVerifiedJoinAcceptedAdditionalData
Replica3::QuerySerializationList, Connection_RM3::GetConstructedReplicas / SendConstruction, ReplicaManager3::GetConnectionsInVirtualWorld / GetGuidsInVirtualWorld
Decision to make first
Expose std::vector<T>& directly, or keep a thin DataStructures::List<T> alias/wrapper so downstream code compiles unchanged? Recommendation: expose the standard types and take the break once, since the project is pre-1.0 and #58 already asked users to update their includes. If the wrapper route is chosen, it should be a pure alias (template<class T> using List = std::vector<T>), not a reimplementation, and documented as deprecated.
Approach
- Change signatures header by header; update every in-tree override (samples, tests, extensions) in the same commit.
- Remove the boundary conversions introduced in stage 2.
- Delete
ds_list.h, ds_queue.h, ds_ordered_list.h, ds_map.h, ds_hash.h and the remaining ds_* containers. Keep ds_memory_pool.h, ds_threadsafe_allocating_queue.h and ds_table.h (allocators / in-memory database, no standard equivalent).
- Changelog: a migration table (old signature → new) for every public virtual, and the version bump per the release procedure in CLAUDE.md.
Acceptance
grep -r DataStructures:: Source/include finds only MemoryPool, ThreadsafeAllocatingQueue, Page and Table.
- All samples, tests and extensions compile against the new signatures.
- Full suite green on Linux (Debug, Release), macOS, Windows.
- Changelog carries the migration table.
Follow-up to #50 / #58, last of three stages. Depends on #59 and #60. This stage breaks source compatibility and should ship as a major version bump.
Scope
54 public headers still name a
DataStructures::type and 22 virtual methods take one as a parameter. Anyone who overrode such a virtual (plugins,CloudServerfilters,ReplicaManager3/Replica3,FullyConnectedMesh2,RakPeerInterface::GetSockets) must change their signature when the type changes, so this cannot be done gradually.Public virtuals affected include:
RakPeerInterface::GetSockets/ReleaseSockets/GetStatisticsList/GetSystemListCloudServer::Release/Get/Unsubscribeand theCloudServerQueryFiltercallbacksFullyConnectedMesh2::GetVerifiedJoinAcceptedAdditionalDataReplica3::QuerySerializationList,Connection_RM3::GetConstructedReplicas/SendConstruction,ReplicaManager3::GetConnectionsInVirtualWorld/GetGuidsInVirtualWorldDecision to make first
Expose
std::vector<T>&directly, or keep a thinDataStructures::List<T>alias/wrapper so downstream code compiles unchanged? Recommendation: expose the standard types and take the break once, since the project is pre-1.0 and #58 already asked users to update their includes. If the wrapper route is chosen, it should be a pure alias (template<class T> using List = std::vector<T>), not a reimplementation, and documented as deprecated.Approach
ds_list.h,ds_queue.h,ds_ordered_list.h,ds_map.h,ds_hash.hand the remainingds_*containers. Keepds_memory_pool.h,ds_threadsafe_allocating_queue.handds_table.h(allocators / in-memory database, no standard equivalent).Acceptance
grep -r DataStructures:: Source/includefinds onlyMemoryPool,ThreadsafeAllocatingQueue,PageandTable.