Exemple #1
0
bool is_source_file(const std::string& filename, std::string &fixed_file_name)
{
    StringVec_t extensions;
    extensions.push_back(".cpp");
    extensions.push_back(".cxx");
    extensions.push_back(".cc");
    extensions.push_back(".c");

    for(size_t n=0; n<extensions.size(); ++n) {
        if ( ends_with(filename, extensions.at(n)) ) {
            fixed_file_name = filename;

#ifdef _WIN32
            std::replace(fixed_file_name.begin(), fixed_file_name.end(), '/', '\\');
#endif
            char* ret = normalize_path(fixed_file_name.c_str(), fixed_file_name.length());
            fixed_file_name = ret;
            free(ret);

            // rtrim
            fixed_file_name.erase(0, fixed_file_name.find_first_not_of("\t\r\v\n\" "));

            // ltrim
            fixed_file_name.erase(fixed_file_name.find_last_not_of("\t\r\v\n\" ")+1);
            return true;
        }
    }
    fixed_file_name.clear();
    return false;
}
GAFObject* GAFObject::getObjectByName(const std::string& name)
{
    if (name.empty())
    {
        return nullptr;
    }

    std::stringstream ss(name);
    std::string item;
    typedef std::vector<std::string> StringVec_t;
    StringVec_t elems;
    while (std::getline(ss, item, '.'))
    {
        elems.push_back(item);
    }

    GAFObject* retval = nullptr;

    if (!elems.empty())
    {
        const NamedParts_t& np = m_timeline->getNamedParts();
        NamedParts_t::const_iterator it = np.find(elems[0]);

        if (it != np.end())
        {
            retval = m_displayList[it->second];

            if (elems.size() == 1)
            {
                return retval;
            }
            StringVec_t::iterator begIt = elems.begin() + 1;

            while (begIt != elems.end())
            {
                const NamedParts_t& np = retval->m_timeline->getNamedParts();
                NamedParts_t::const_iterator it = np.find(*begIt);
                if (it != np.end())
                {
                    retval = retval->m_displayList[it->second];
                }
                else
                {
                    // Sequence is incorrect
                    //break;

                    // It is better to return nil instead of the last found object in a chain
                    return nullptr;
                }

                ++begIt;
            }

            return retval;
        }
    }
    return nullptr;
}