Esempio n. 1
0
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());
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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.
}