simple_string.hpp
Go to the documentation of this file.
1 #ifndef SIMPLE_STRING_HPP
2 #define SIMPLE_STRING_HPP
3 
4 #include <string>
5 #include <cstring>
6 
7 namespace SafeAny
8 {
9 // Version of string that uses only two words. Good for small object optimization in linb::any
11 {
12  public:
13  SimpleString(const std::string& str) : SimpleString(str.data(), str.size())
14  {
15  }
16  SimpleString(const char* input_data) : SimpleString(input_data, strlen(input_data))
17  {
18  }
19 
20  SimpleString(const char* input_data, std::size_t size) : _size(size)
21  {
22  if(size >= sizeof(void*) )
23  {
24  _data.ptr = new char[_size + 1];
25  }
26  std::memcpy(data(), input_data, _size);
27  data()[_size] = '\0';
28  }
29 
30  SimpleString(const SimpleString& other) : SimpleString(other.data(), other.size())
31  {
32  }
33 
35  {
36  if ( _size >= sizeof(void*) && _data.ptr )
37  {
38  delete[] _data.ptr;
39  }
40  }
41 
42  std::string toStdString() const
43  {
44  return std::string(data(), _size);
45  }
46 
47  const char* data() const
48  {
49  if( _size >= sizeof(void*))
50  {
51  return _data.ptr;
52  }
53  else{
54  return _data.soo;
55  }
56  }
57 
58  char* data()
59  {
60  if( _size >= sizeof(void*))
61  {
62  return _data.ptr;
63  }
64  else{
65  return _data.soo;
66  }
67  }
68 
69  std::size_t size() const
70  {
71  return _size;
72  }
73 
74  private:
75  union{
76  char* ptr;
77  char soo[sizeof(void*)] ;
78  }_data;
79 
80  std::size_t _size;
81 };
82 
83 }
84 
85 #endif // SIMPLE_STRING_HPP
SimpleString(const char *input_data, std::size_t size)
char soo[sizeof(void *)]
SimpleString(const std::string &str)
SimpleString(const char *input_data)
const char * str
Definition: util.h:257
SimpleString(const SimpleString &other)
union SafeAny::SimpleString::@2 _data
std::string toStdString() const
std::size_t size() const
const char * data() const


behaviortree_cpp
Author(s): Michele Colledanchise, Davide Faconti
autogenerated on Sat Jun 8 2019 18:04:05