This is an automated email from the ASF dual-hosted git repository.

bcall pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new f4944ee  MIME: Update MIMEField::name_get and MIMEField::value_get to 
return string_view.
f4944ee is described below

commit f4944ee494316245da5bc1decffbf0af87f991e4
Author: Alan M. Carroll <[email protected]>
AuthorDate: Thu Jan 17 10:21:44 2019 -0600

    MIME: Update MIMEField::name_get and MIMEField::value_get to return 
string_view.
---
 proxy/hdrs/MIME.cc           | 65 ++++++++++++++++++--------------------------
 proxy/hdrs/MIME.h            | 28 +++++++++++--------
 src/traffic_server/InkAPI.cc |  6 ++--
 3 files changed, 46 insertions(+), 53 deletions(-)

diff --git a/proxy/hdrs/MIME.cc b/proxy/hdrs/MIME.cc
index c2a22c8..33ab602 100644
--- a/proxy/hdrs/MIME.cc
+++ b/proxy/hdrs/MIME.cc
@@ -1476,9 +1476,8 @@ mime_hdr_field_attach(MIMEHdrImpl *mh, MIMEField *field, 
int check_for_dups, MIM
   //////////////////////////////////////////////////
 
   if (check_for_dups || (prev_dup && (!prev_dup->is_dup_head()))) {
-    int length;
-    const char *name = mime_field_name_get(field, &length);
-    prev_dup         = mime_hdr_field_find(mh, name, length);
+    std::string_view name{field->name_get()};
+    prev_dup = mime_hdr_field_find(mh, name.data(), 
static_cast<int>(name.size()));
     ink_assert((prev_dup == nullptr) || (prev_dup->is_dup_head()));
   }
 
@@ -1595,9 +1594,8 @@ mime_hdr_field_detach(MIMEHdrImpl *mh, MIMEField *field, 
bool detach_all_dups)
     }
   } else // need to walk list to find and patch out from predecessor
   {
-    int name_length;
-    const char *name = mime_field_name_get(field, &name_length);
-    MIMEField *prev  = mime_hdr_field_find(mh, name, name_length);
+    std::string_view name{field->name_get()};
+    MIMEField *prev = mime_hdr_field_find(mh, name.data(), 
static_cast<int>(name.size()));
 
     while (prev && (prev->m_next_dup != field)) {
       prev = prev->m_next_dup;
@@ -1726,15 +1724,13 @@ mime_field_destroy(MIMEHdrImpl * /* mh ATS_UNUSED */, 
MIMEField *field)
   field->m_readiness = MIME_FIELD_SLOT_READINESS_DELETED;
 }
 
-const char *
-mime_field_name_get(const MIMEField *field, int *length)
+std::string_view
+MIMEField::name_get() const
 {
-  *length = field->m_len_name;
-  if (field->m_wks_idx >= 0) {
-    return hdrtoken_index_to_wks(field->m_wks_idx);
-  } else {
-    return field->m_ptr_name;
+  if (m_wks_idx >= 0) {
+    return {hdrtoken_index_to_wks(m_wks_idx), m_len_name};
   }
+  return {m_ptr_name, m_len_name};
 }
 
 void
@@ -1781,45 +1777,42 @@ MIMEField::value_get_index(const char *value, int 
length) const
   return retval;
 }
 
-const char *
-mime_field_value_get(const MIMEField *field, int *length)
+std::string_view
+MIMEField::value_get() const
 {
-  *length = field->m_len_value;
-  return field->m_ptr_value;
+  return {m_ptr_value, m_len_value};
 }
 
 int32_t
 mime_field_value_get_int(const MIMEField *field)
 {
-  int length;
-  const char *str = mime_field_value_get(field, &length);
+  std::string_view value{field->value_get()};
 
-  return mime_parse_int(str, str + length);
+  return mime_parse_int(value.data(), value.data() + value.size());
 }
 
 uint32_t
 mime_field_value_get_uint(const MIMEField *field)
 {
-  int length;
-  const char *str = mime_field_value_get(field, &length);
-  return mime_parse_uint(str, str + length);
+  std::string_view value{field->value_get()};
+
+  return mime_parse_uint(value.data(), value.data() + value.size());
 }
 
 int64_t
 mime_field_value_get_int64(const MIMEField *field)
 {
-  int length;
-  const char *str = mime_field_value_get(field, &length);
+  std::string_view value{field->value_get()};
 
-  return mime_parse_int64(str, str + length);
+  return mime_parse_int64(value.data(), value.data() + value.size());
 }
 
 time_t
 mime_field_value_get_date(const MIMEField *field)
 {
-  int length;
-  const char *str = mime_field_value_get(field, &length);
-  return mime_parse_date(str, str + length);
+  std::string_view value{field->value_get()};
+
+  return mime_parse_date(value.data(), value.data() + value.size());
 }
 
 const char *
@@ -1828,10 +1821,9 @@ mime_field_value_get_comma_val(const MIMEField *field, 
int *length, int idx)
   // some fields (like Date) contain commas but should not be ripped apart
   if (!field->supports_commas()) {
     if (idx == 0) {
-      return mime_field_value_get(field, length);
-    } else {
-      return nullptr;
+      return field->value_get(length);
     }
+    return nullptr;
   } else {
     Str *str;
     StrList list(false);
@@ -1864,16 +1856,13 @@ mime_field_value_get_comma_val_count(const MIMEField 
*field)
 int
 mime_field_value_get_comma_list(const MIMEField *field, StrList *list)
 {
-  const char *str;
-  int len;
-
-  str = mime_field_value_get(field, &len);
+  std::string_view value{field->value_get()};
 
   // if field doesn't support commas, don't rip apart.
   if (!field->supports_commas()) {
-    list->append_string(str, len);
+    list->append_string(value.data(), static_cast<int>(value.size()));
   } else {
-    HttpCompat::parse_tok_list(list, 1, str, len, ',');
+    HttpCompat::parse_tok_list(list, 1, value.data(), 
static_cast<int>(value.size()), ',');
   }
 
   return list->count;
diff --git a/proxy/hdrs/MIME.h b/proxy/hdrs/MIME.h
index 59431a6..5e78834 100644
--- a/proxy/hdrs/MIME.h
+++ b/proxy/hdrs/MIME.h
@@ -141,6 +141,8 @@ struct MIMEField {
       return true; // by default, assume supports commas
   }
 
+  /// @return The name of @a this field.
+  std::string_view name_get() const;
   const char *name_get(int *length) const;
 
   /** Find the index of the value in the multi-value field.
@@ -157,7 +159,10 @@ struct MIMEField {
   */
   int value_get_index(const char *value, int length) const;
 
+  /// @return The value of @a this field.
+  std::string_view value_get() const;
   const char *value_get(int *length) const;
+
   int32_t value_get_int() const;
   uint32_t value_get_uint() const;
   int64_t value_get_int64() const;
@@ -655,11 +660,9 @@ inkcoreapi MIMEField 
*mime_hdr_prepare_for_value_set(HdrHeap *heap, MIMEHdrImpl
 
 void mime_field_destroy(MIMEHdrImpl *mh, MIMEField *field);
 
-const char *mime_field_name_get(const MIMEField *field, int *length);
 void mime_field_name_set(HdrHeap *heap, MIMEHdrImpl *mh, MIMEField *field, 
int16_t name_wks_idx_or_neg1, const char *name,
                          int length, bool must_copy_string);
 
-inkcoreapi const char *mime_field_value_get(const MIMEField *field, int 
*length);
 int32_t mime_field_value_get_int(const MIMEField *field);
 uint32_t mime_field_value_get_uint(const MIMEField *field);
 int64_t mime_field_value_get_int64(const MIMEField *field);
@@ -744,7 +747,9 @@ int mime_parse_integer(const char *&buf, const char *end, 
int *integer);
 inline const char *
 MIMEField::name_get(int *length) const
 {
-  return (mime_field_name_get(this, length));
+  auto name{this->name_get()};
+  *length = int(name.size());
+  return name.data();
 }
 
 /*-------------------------------------------------------------------------
@@ -788,7 +793,9 @@ MIMEField::name_is_valid() const
 inline const char *
 MIMEField::value_get(int *length) const
 {
-  return (mime_field_value_get(this, length));
+  auto value{this->value_get()};
+  *length = int(value.size());
+  return value.data();
 }
 
 inline int32_t
@@ -1253,20 +1260,17 @@ MIMEHdr::value_get_index(const char *name, int 
name_length, const char *value, i
 inline const char *
 MIMEHdr::value_get(const char *name, int name_length, int 
*value_length_return) const
 {
-  //    ink_assert(valid());
-  const MIMEField *field = field_find(name, name_length);
-
-  if (field)
-    return (mime_field_value_get(field, value_length_return));
-  else
-    return (nullptr);
+  if (const MIMEField *field = field_find(name, name_length); field) {
+    return field->value_get(value_length_return);
+  }
+  return nullptr;
 }
 
 inline std::string_view
 MIMEHdr::value_get(std::string_view const &name) const
 {
   if (MIMEField const *field = field_find(name.data(), name.size()); field) {
-    return {field->m_ptr_value, field->m_len_value};
+    return field->value_get();
   }
   return {};
 }
diff --git a/src/traffic_server/InkAPI.cc b/src/traffic_server/InkAPI.cc
index 2969dbc..b92e42c 100644
--- a/src/traffic_server/InkAPI.cc
+++ b/src/traffic_server/InkAPI.cc
@@ -2684,7 +2684,7 @@ TSMimeFieldValueGet(TSMBuffer /* bufp ATS_UNUSED */, 
TSMLoc field_obj, int idx,
   if (idx >= 0) {
     return mime_field_value_get_comma_val(handle->field_ptr, value_len_ptr, 
idx);
   } else {
-    return mime_field_value_get(handle->field_ptr, value_len_ptr);
+    return handle->field_ptr->value_get(value_len_ptr);
   }
 }
 
@@ -3135,8 +3135,8 @@ TSMimeHdrFieldNameGet(TSMBuffer bufp, TSMLoc hdr, TSMLoc 
field, int *length)
   sdk_assert(sdk_sanity_check_field_handle(field, hdr) == TS_SUCCESS);
   sdk_assert(sdk_sanity_check_null_ptr((void *)length) == TS_SUCCESS);
 
-  MIMEFieldSDKHandle *handle = (MIMEFieldSDKHandle *)field;
-  return mime_field_name_get(handle->field_ptr, length);
+  MIMEFieldSDKHandle *handle = reinterpret_cast<MIMEFieldSDKHandle *>(field);
+  return handle->field_ptr->name_get(length);
 }
 
 TSReturnCode

Reply via email to