proxygen
proxygen::HPACKHeaderName Class Reference

#include <HPACKHeaderName.h>

Public Member Functions

 HPACKHeaderName ()
 
 HPACKHeaderName (folly::StringPiece name)
 
 HPACKHeaderName (const HPACKHeaderName &headerName)
 
 HPACKHeaderName (HPACKHeaderName &&goner) noexcept
 
HPACKHeaderNameoperator= (folly::StringPiece name)
 
HPACKHeaderNameoperator= (const HPACKHeaderName &headerName)
 
HPACKHeaderNameoperator= (HPACKHeaderName &&goner) noexcept
 
 ~HPACKHeaderName ()
 
bool operator== (const HPACKHeaderName &headerName) const
 
bool operator!= (const HPACKHeaderName &headerName) const
 
bool operator> (const HPACKHeaderName &headerName) const
 
bool operator< (const HPACKHeaderName &headerName) const
 
bool operator>= (const HPACKHeaderName &headerName) const
 
bool operator<= (const HPACKHeaderName &headerName) const
 
const std::stringget () const
 
HTTPHeaderCode getHeaderCode () const
 
bool isCommonHeader () const
 
uint32_t size () const
 
const char * c_str () const
 

Private Member Functions

void storeAddress (folly::StringPiece name)
 
void copyAddress (const HPACKHeaderName &headerName)
 
void moveAddress (HPACKHeaderName &goner)
 
void resetAddress ()
 
bool isAllocated () const
 

Private Attributes

const std::stringaddress_ = nullptr
 

Detailed Description

Definition at line 29 of file HPACKHeaderName.h.

Constructor & Destructor Documentation

proxygen::HPACKHeaderName::HPACKHeaderName ( )
inline

Definition at line 31 of file HPACKHeaderName.h.

31 {}
proxygen::HPACKHeaderName::HPACKHeaderName ( folly::StringPiece  name)
inlineexplicit

Definition at line 33 of file HPACKHeaderName.h.

References storeAddress().

33  {
34  storeAddress(name);
35  }
void storeAddress(folly::StringPiece name)
proxygen::HPACKHeaderName::HPACKHeaderName ( const HPACKHeaderName headerName)
inline

Definition at line 36 of file HPACKHeaderName.h.

References copyAddress().

36  {
37  copyAddress(headerName);
38  }
void copyAddress(const HPACKHeaderName &headerName)
proxygen::HPACKHeaderName::HPACKHeaderName ( HPACKHeaderName &&  goner)
inlinenoexcept

Definition at line 39 of file HPACKHeaderName.h.

References moveAddress().

39  {
40  moveAddress(goner);
41  }
void moveAddress(HPACKHeaderName &goner)
proxygen::HPACKHeaderName::~HPACKHeaderName ( )
inline

Definition at line 62 of file HPACKHeaderName.h.

References resetAddress().

62  {
63  resetAddress();
64  }

Member Function Documentation

const char* proxygen::HPACKHeaderName::c_str ( ) const
inline

Definition at line 132 of file HPACKHeaderName.h.

References address_.

132  {
133  return address_->c_str();
134  }
const std::string * address_
void proxygen::HPACKHeaderName::copyAddress ( const HPACKHeaderName headerName)
inlineprivate

Definition at line 157 of file HPACKHeaderName.h.

References address_, get(), isAllocated(), and string.

Referenced by HPACKHeaderName(), and operator=().

157  {
158  if (headerName.isAllocated()) {
159  address_ = new std::string(headerName.get());
160  } else {
161  address_ = headerName.address_;
162  }
163  }
const std::string * address_
const char * string
Definition: Conv.cpp:212
HTTPHeaderCode proxygen::HPACKHeaderName::getHeaderCode ( ) const
inline
bool proxygen::HPACKHeaderName::isAllocated ( ) const
inlineprivate

Definition at line 187 of file HPACKHeaderName.h.

References address_, proxygen::HTTPCommonHeaders::isHeaderNameFromTable(), and proxygen::TABLE_LOWERCASE.

Referenced by copyAddress(), operator<(), operator>(), and resetAddress().

187  {
188  if (address_ == nullptr) {
189  return false;
190  } else {
193  }
194  }
const std::string * address_
static bool isHeaderNameFromTable(const std::string *headerName, HTTPCommonHeaderTableType type)
bool proxygen::HPACKHeaderName::isCommonHeader ( ) const
inline

Definition at line 122 of file HPACKHeaderName.h.

References address_, proxygen::HTTPCommonHeaders::isHeaderNameFromTable(), and proxygen::TABLE_LOWERCASE.

Referenced by proxygen::HPACKContext::getIndex(), and TEST_F().

122  {
124  }
const std::string * address_
static bool isHeaderNameFromTable(const std::string *headerName, HTTPCommonHeaderTableType type)
void proxygen::HPACKHeaderName::moveAddress ( HPACKHeaderName goner)
inlineprivate

Definition at line 168 of file HPACKHeaderName.h.

References address_.

Referenced by HPACKHeaderName(), and operator=().

168  {
169  address_ = goner.address_;
170  goner.address_ = nullptr;
171  }
const std::string * address_
bool proxygen::HPACKHeaderName::operator!= ( const HPACKHeaderName headerName) const
inline

Definition at line 73 of file HPACKHeaderName.h.

73  {
74  // Utilize the == overloaded operator
75  return !(*this == headerName);
76  }
bool proxygen::HPACKHeaderName::operator< ( const HPACKHeaderName headerName) const
inline

Definition at line 86 of file HPACKHeaderName.h.

References address_, and isAllocated().

86  {
87  if (!isAllocated() && !headerName.isAllocated()) {
88  // Common header tables are aligned alphabetically (unit tested as well
89  // to ensure it isn't accidentally changed)
90  return address_ < headerName.address_;
91  } else {
92  return *address_ < *(headerName.address_);
93  }
94  }
const std::string * address_
bool proxygen::HPACKHeaderName::operator<= ( const HPACKHeaderName headerName) const
inline

Definition at line 99 of file HPACKHeaderName.h.

99  {
100  // Utilize existing > overload operator
101  return !(*this > headerName);
102  }
HPACKHeaderName& proxygen::HPACKHeaderName::operator= ( folly::StringPiece  name)
inline

Definition at line 42 of file HPACKHeaderName.h.

References resetAddress(), and storeAddress().

42  {
43  resetAddress();
44  storeAddress(name);
45  return *this;
46  }
void storeAddress(folly::StringPiece name)
HPACKHeaderName& proxygen::HPACKHeaderName::operator= ( const HPACKHeaderName headerName)
inline

Definition at line 47 of file HPACKHeaderName.h.

References copyAddress(), and resetAddress().

47  {
48  if (this != &headerName) {
49  resetAddress();
50  copyAddress(headerName);
51  }
52  return *this;
53  }
void copyAddress(const HPACKHeaderName &headerName)
HPACKHeaderName& proxygen::HPACKHeaderName::operator= ( HPACKHeaderName &&  goner)
inlinenoexcept

Definition at line 54 of file HPACKHeaderName.h.

References moveAddress(), and resetAddress().

54  {
55  if (this != &goner) {
56  resetAddress();
57  moveAddress(goner);
58  }
59  return *this;
60  }
void moveAddress(HPACKHeaderName &goner)
bool proxygen::HPACKHeaderName::operator== ( const HPACKHeaderName headerName) const
inline

Definition at line 69 of file HPACKHeaderName.h.

References address_.

69  {
70  return address_ == headerName.address_ ||
71  *address_ == *(headerName.address_);
72  }
const std::string * address_
bool proxygen::HPACKHeaderName::operator> ( const HPACKHeaderName headerName) const
inline

Definition at line 77 of file HPACKHeaderName.h.

References address_, and isAllocated().

77  {
78  if (!isAllocated() && !headerName.isAllocated()) {
79  // Common header tables are aligned alphabetically (unit tested as well
80  // to ensure it isn't accidentally changed)
81  return address_ > headerName.address_;
82  } else {
83  return *address_ > *(headerName.address_);
84  }
85  }
const std::string * address_
bool proxygen::HPACKHeaderName::operator>= ( const HPACKHeaderName headerName) const
inline

Definition at line 95 of file HPACKHeaderName.h.

95  {
96  // Utilize existing < overloaded operator
97  return !(*this < headerName);
98  }
void proxygen::HPACKHeaderName::resetAddress ( )
inlineprivate

Definition at line 176 of file HPACKHeaderName.h.

References address_, and isAllocated().

Referenced by operator=(), and ~HPACKHeaderName().

176  {
177  if (isAllocated()) {
178  delete address_;
179  }
180  address_ = nullptr;
181  }
const std::string * address_
uint32_t proxygen::HPACKHeaderName::size ( ) const
inline

Definition at line 129 of file HPACKHeaderName.h.

References address_, and uint32_t.

Referenced by proxygen::HPACKHeader::bytes(), and TEST_F().

129  {
130  return (uint32_t)(address_->size());
131  }
const std::string * address_
void proxygen::HPACKHeaderName::storeAddress ( folly::StringPiece  name)
inlineprivate

Definition at line 140 of file HPACKHeaderName.h.

References address_, folly::Range< Iter >::begin(), folly::Range< Iter >::data(), folly::Range< Iter >::end(), proxygen::HTTPCommonHeaders::getPointerToHeaderName(), proxygen::HTTPCommonHeaders::hash(), proxygen::HTTP_HEADER_NONE, proxygen::HTTP_HEADER_OTHER, folly::Range< Iter >::size(), string, proxygen::TABLE_LOWERCASE, and folly::pushmi::operators::transform.

Referenced by HPACKHeaderName(), and operator=().

140  {
142  name.data(), name.size());
143  if (headerCode == HTTPHeaderCode::HTTP_HEADER_NONE ||
144  headerCode == HTTPHeaderCode::HTTP_HEADER_OTHER) {
145  std::string* newAddress = new std::string(name.size(), 0);
146  std::transform(name.begin(), name.end(), newAddress->begin(), ::tolower);
147  address_ = newAddress;
148  } else {
150  headerCode, TABLE_LOWERCASE);
151  }
152  }
const std::string * address_
constexpr size_type size() const
Definition: Range.h:431
PUSHMI_INLINE_VAR constexpr detail::transform_fn transform
Definition: transform.h:158
constexpr Iter data() const
Definition: Range.h:446
static const std::string * getPointerToHeaderName(HTTPHeaderCode code, HTTPCommonHeaderTableType type=TABLE_CAMELCASE)
constexpr Iter end() const
Definition: Range.h:455
constexpr Iter begin() const
Definition: Range.h:452
const char * string
Definition: Conv.cpp:212
static FB_EXPORT HTTPHeaderCode hash(const char *name, size_t len)

Member Data Documentation

const std::string* proxygen::HPACKHeaderName::address_ = nullptr
private

The documentation for this class was generated from the following file: