IFileNode* FileCollectorImpl::AddFileNode(const file_id_t& id, file_size_t pos, bool_t bFinish, const char_t* strDir, const char_t* strName) { if (NULL == strDir || NULL == strName) { return NULL; } if (IFileNode::INVALID_FILE_ID == id) { return NULL; } hash_value_t hash = char_t_hash()(strDir); /* find */ FileNode* pFileNode = findFileNode(hash, strName); if (NULL == pFileNode) { pFileNode = new FileNode(strDir, NULL, strName, id, pos, bFinish); if (NULL == pFileNode) { return NULL; } // add to map addFileNode(hash, pFileNode->LocalName(), pFileNode); } if (IFileNode::INVALID_FILE_ID != id) { // update id pFileNode->SetID(id); addFileNode(id, pFileNode); } return pFileNode; }