NodeSystem::NodeSystem(Database& database) : database_(database), nextHandle_(0) { emptyDir_ = CreateEmptyNode(database_, TYPE_DIRECTORY); emptyFile_ = CreateEmptyNode(database_, TYPE_FILE); rootId_ = emptyDir_; metadata_.emplace(FUSE::Path(), Metadata::Now()); }
const Param& Param::getNode(const std::string &str) const { if(m_childNodes.count(str) > 0) { return *m_childNodes.find(str)->second.get(); } // If node found. CreateEmptyNode(m_childNodes, this, str); return getNode(str); }
const Param& Param::getIndex(const std::size_t index) const { if(m_parentNode) { // Find the element of the parent map for your string. const std::size_t numOfParams = m_parentNode->m_childNodes.count(m_name); if(index >= numOfParams) { // Create empty nodes for(std::size_t i = 0; i <= (index - numOfParams); ++i) { CreateEmptyNode(m_parentNode->m_childNodes, m_parentNode, m_name); } } std::pair< std::map<std::string, std::unique_ptr<Param> >::iterator, std::map<std::string, std::unique_ptr<Param> >::iterator > itRange = m_parentNode->m_childNodes.equal_range(m_name); auto it = itRange.first; for(std::size_t i = 0; i <= index; ++i) { if(i < index) { ++it; } else { return *(*it).second.get(); } } assert(false); // this is a big fail. } assert(false); // Need a root parent. return *this; // Just for warning this should error. }