You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

port.h 3.4 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Protocol Buffers - Google's data interchange format
  2. // Copyright 2008 Google Inc. All rights reserved.
  3. // https://developers.google.com/protocol-buffers/
  4. //
  5. // Redistribution and use in source and binary forms, with or without
  6. // modification, are permitted provided that the following conditions are
  7. // met:
  8. //
  9. // * Redistributions of source code must retain the above copyright
  10. // notice, this list of conditions and the following disclaimer.
  11. // * Redistributions in binary form must reproduce the above
  12. // copyright notice, this list of conditions and the following disclaimer
  13. // in the documentation and/or other materials provided with the
  14. // distribution.
  15. // * Neither the name of Google Inc. nor the names of its
  16. // contributors may be used to endorse or promote products derived from
  17. // this software without specific prior written permission.
  18. //
  19. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  22. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  23. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  24. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  25. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  26. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  27. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  28. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  29. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. // A common header that is included across all protobuf headers. We do our best
  31. // to avoid #defining any macros here; instead we generally put macros in
  32. // port_def.inc and port_undef.inc so they are not visible from outside of
  33. // protobuf.
  34. #ifndef GOOGLE_PROTOBUF_PORT_H__
  35. #define GOOGLE_PROTOBUF_PORT_H__
  36. #include <cstddef>
  37. #include <new>
  38. namespace google
  39. {
  40. namespace protobuf
  41. {
  42. namespace internal
  43. {
  44. inline void SizedDelete(void* p, size_t size)
  45. {
  46. #if defined(__cpp_sized_deallocation)
  47. ::operator delete(p, size);
  48. #else
  49. ::operator delete(p);
  50. #endif
  51. }
  52. inline void SizedArrayDelete(void* p, size_t size)
  53. {
  54. #if defined(__cpp_sized_deallocation)
  55. ::operator delete[](p, size);
  56. #else
  57. ::operator delete[](p);
  58. #endif
  59. }
  60. // Tag type used to invoke the constinit constructor overload of classes
  61. // such as ArenaStringPtr and MapFieldBase. Such constructors are internal
  62. // implementation details of the library.
  63. struct ConstantInitialized
  64. {
  65. explicit ConstantInitialized() = default;
  66. };
  67. // Tag type used to invoke the arena constructor overload of classes such
  68. // as ExtensionSet and MapFieldLite in aggregate initialization. These
  69. // classes typically don't have move/copy constructors, which rules out
  70. // explicit initialization in pre-C++17.
  71. struct ArenaInitialized
  72. {
  73. explicit ArenaInitialized() = default;
  74. };
  75. } // namespace internal
  76. } // namespace protobuf
  77. } // namespace google
  78. #endif // GOOGLE_PROTOBUF_PORT_H__