Skip to content

Commit 67ba113

Browse files
committedDec 13, 2024
use shared_ptr in entity_registry
1 parent dc97c86 commit 67ba113

File tree

2 files changed

+12
-13
lines changed

2 files changed

+12
-13
lines changed
 

‎include/entity.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99

1010
class EntityRegistry : public entt::registry
1111
{
12-
SQLite::Database db;
12+
std::shared_ptr<SQLite::Database> db;
1313
std::vector<std::shared_ptr<SQLPersister>> persisters;
1414
std::map<int, entt::entity> entityLocator;
1515

1616
public:
1717
EntityRegistry();
18-
SQLite::Database& getDatabase();
18+
SQLite::Database &getDatabase();
1919
void addPersister(std::shared_ptr<SQLPersister>);
2020
void depersist(entt::entity);
2121
entt::entity createPersistent();

‎src/entity.cpp

+10-11
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,20 @@
33
#include "persister.h"
44
#include <iostream>
55

6-
EntityRegistry::EntityRegistry()
7-
: db("./db/matrix.db", SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE)
8-
{
6+
EntityRegistry::EntityRegistry() {
7+
db = std::make_shared<SQLite::Database>("./db/matrix.db",
8+
SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE);
99
}
1010

11-
SQLite::Database&
12-
EntityRegistry::getDatabase()
11+
SQLite::Database &EntityRegistry::getDatabase()
1312
{
14-
return db;
13+
return *db;
1514
}
1615

1716
void
1817
EntityRegistry::createTablesIfNeeded()
1918
{
20-
db.exec("CREATE TABLE IF NOT EXISTS Entity "
19+
db->exec("CREATE TABLE IF NOT EXISTS Entity "
2120
"(id INTEGER PRIMARY KEY)");
2221

2322
for (auto persister : persisters) {
@@ -44,7 +43,7 @@ EntityRegistry::save(entt::entity e)
4443
void
4544
EntityRegistry::loadAll()
4645
{
47-
SQLite::Statement query(db, "SELECT * FROM Entity");
46+
SQLite::Statement query(*db, "SELECT * FROM Entity");
4847
while (query.executeStep()) {
4948
int entityId = query.getColumn(0).getInt();
5049
entt::entity newEntity = create();
@@ -74,9 +73,9 @@ EntityRegistry::addPersister(std::shared_ptr<SQLPersister> p)
7473
entt::entity
7574
EntityRegistry::createPersistent()
7675
{
77-
SQLite::Statement query(db, "INSERT INTO Entity (id) VALUES (NULL)");
76+
SQLite::Statement query(*db, "INSERT INTO Entity (id) VALUES (NULL)");
7877
query.exec();
79-
int64_t id = db.getLastInsertRowid();
78+
int64_t id = db->getLastInsertRowid();
8079
auto rv = this->create();
8180
emplace<Persistable>(rv, id);
8281
entityLocator[id] = rv;
@@ -91,7 +90,7 @@ EntityRegistry::depersist(entt::entity entity)
9190
for (auto persister : persisters) {
9291
persister->depersist(entity);
9392
}
94-
SQLite::Statement query(db, "DELETE FROM Entity WHERE id = ?");
93+
SQLite::Statement query(*db, "DELETE FROM Entity WHERE id = ?");
9594
query.bind(1, persistable.entityId);
9695
query.exec();
9796
destroy(entity);

0 commit comments

Comments
 (0)
Please sign in to comment.