Github user phrocker commented on a diff in the pull request:

    https://github.com/apache/nifi-minifi-cpp/pull/417#discussion_r225495011
  
    --- Diff: libminifi/src/capi/api.cpp ---
    @@ -237,25 +239,58 @@ void update_attribute(flow_file_record *ff, char 
*key, void *value, size_t size)
      * @param caller_attribute caller supplied object in which we will copy 
the data ptr
      * @return 0 if successful, -1 if the key does not exist
      */
    -uint8_t get_attribute(flow_file_record *ff, char *key, attribute 
*caller_attribute) {
    +uint8_t get_attribute(flow_file_record *ff, attribute *caller_attribute) {
    +  if (ff == nullptr) {
    +    return -1;
    +  }
       auto attribute_map = static_cast<string_map*>(ff->attributes);
    -  auto find = attribute_map->find(key);
    +  if (!attribute_map) {
    +    return -1;
    +  }
    +  auto find = attribute_map->find(caller_attribute->key);
       if (find != attribute_map->end()) {
    -    caller_attribute->key = key;
         caller_attribute->value = 
static_cast<void*>(const_cast<char*>(find->second.data()));
         caller_attribute->value_size = find->second.size();
         return 0;
       }
       return -1;
     }
     
    +attribute_set *get_all_attributes(const flow_file_record* ff) {
    +  if (ff == nullptr) {
    +    return nullptr;
    +  }
    +  auto attribute_map = static_cast<string_map*>(ff->attributes);
    +  if (!attribute_map || attribute_map->empty()) {
    +    return nullptr;
    +  }
    +  attribute_set * attr_set = new attribute_set;
    +  attr_set->size = attribute_map->size();
    +  attr_set->attributes = new attribute[attr_set->size];
    +  std::transform(attribute_map->begin(), attribute_map->end(), 
attr_set->attributes,
    --- End diff --
    
    Anytime I see an empty capture I question, what benefit does this serve 
over a range based for loop with const ref auto? It seems that would be the 
same length if not shorter and be a simpler read for future maintainers. 


---

Reply via email to