Пример #1
0
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;
}