Spec * RegionImplFactory::getSpec(const std::string nodeType) { std::map<std::string, Spec*>::iterator it; // return from cache if we already have it it = nodespecCache_.find(nodeType); if (it != nodespecCache_.end()) return it->second; // grab the nodespec and cache it // one entry per supported node type Spec * ns = nullptr; if (cppRegions.find(nodeType) != cppRegions.end()) { ns = cppRegions[nodeType]->createSpec(); } else if (nodeType.find(std::string("py.")) == 0) { if (!pyLib_) pyLib_ = boost::shared_ptr<DynamicPythonLibrary>(new DynamicPythonLibrary()); ns = getPySpec(pyLib_.get(), nodeType); } else { NTA_THROW << "getSpec() -- Unsupported node type '" << nodeType << "'"; } if (!ns) NTA_THROW << "Unable to get node spec for: " << nodeType; nodespecCache_[nodeType] = ns; return ns; }
Spec * RegionImplFactory::getSpec(const std::string nodeType) { std::map<std::string, Spec*>::iterator it; // return from cache if we already have it it = nodespecCache_.find(nodeType); if (it != nodespecCache_.end()) return it->second; // grab the nodespec and cache it // one entry per supported node type Spec * ns = NULL; if (nodeType == "TestNode") { ns = TestNode::createSpec(); } else if (nodeType == "SpatialPoolerNode") { ns = SpatialPoolerNode::createSpec(); } else if (nodeType == "TemporalPoolerNode") { ns = TemporalPoolerNode::createSpec(); } else if (nodeType == "VectorFileEffector") { ns = VectorFileEffector::createSpec(); } else if (nodeType == "VectorFileSensor") { ns = VectorFileSensor::createSpec(); } else if (nodeType.find(std::string("py.")) == 0) { if (!pyLib_) pyLib_ = boost::shared_ptr<DynamicPythonLibrary>(new DynamicPythonLibrary()); ns = getPySpec(pyLib_.get(), nodeType); } else { NTA_THROW << "getSpec() -- Unsupported node type '" << nodeType << "'"; } if (!ns) NTA_THROW << "Unable to get node spec for: " << nodeType; nodespecCache_[nodeType] = ns; return ns; }