diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2019-12-16 11:56:39 -0600 |
---|---|---|
committer | Andres Noetzli <andres.noetzli@gmail.com> | 2019-12-16 09:56:39 -0800 |
commit | c101a6b42d1f14bc750fb2328ddd83261148d7ae (patch) | |
tree | 3155d3edd7c26690088cbc9a223de5c854941475 /src/expr/node_manager.cpp | |
parent | d15d44b3c91b5be2c19adac292f137d2a67eb848 (diff) |
Move Datatype management to ExprManager (#3568)
This is further work towards decoupling the Expr layer from the Node layer.
This commit makes it so that ExprManager does memory management for Datatype while NodeManager maintains a list of DType.
As a reminder, the ownership policy (and level of indirection through DatatypeIndex) is necessary due to not being able to store Datatype within Node since this leads to circular dependencies in the Node AST.
Diffstat (limited to 'src/expr/node_manager.cpp')
-rw-r--r-- | src/expr/node_manager.cpp | 28 |
1 files changed, 7 insertions, 21 deletions
diff --git a/src/expr/node_manager.cpp b/src/expr/node_manager.cpp index 0c3f1b4cb..39be675ec 100644 --- a/src/expr/node_manager.cpp +++ b/src/expr/node_manager.cpp @@ -187,15 +187,7 @@ NodeManager::~NodeManager() { d_rt_cache.d_children.clear(); d_rt_cache.d_data = dummy; - // TODO: switch to DType - for (std::vector<Datatype*>::iterator - datatype_iter = d_ownedDatatypes.begin(), - datatype_end = d_ownedDatatypes.end(); - datatype_iter != datatype_end; ++datatype_iter) { - Datatype* datatype = *datatype_iter; - delete datatype; - } - d_ownedDatatypes.clear(); + d_ownedDTypes.clear(); Assert(!d_attrManager->inGarbageCollection()); @@ -248,23 +240,17 @@ NodeManager::~NodeManager() { d_options = NULL; } -unsigned NodeManager::registerDatatype(Datatype* dt) { - unsigned sz = d_ownedDatatypes.size(); - d_ownedDatatypes.push_back( dt ); +size_t NodeManager::registerDatatype(std::shared_ptr<DType> dt) +{ + size_t sz = d_ownedDTypes.size(); + d_ownedDTypes.push_back(dt); return sz; } -const Datatype & NodeManager::getDatatypeForIndex( unsigned index ) const{ - // when the Node-level API is in place, this function will be deleted. - Assert(index < d_ownedDatatypes.size()); - return *d_ownedDatatypes[index]; -} - const DType& NodeManager::getDTypeForIndex(unsigned index) const { - const Datatype& d = getDatatypeForIndex(index); - // return its internal representation - return *d.d_internal; + Assert(index < d_ownedDTypes.size()); + return *d_ownedDTypes[index]; } void NodeManager::reclaimZombies() { |