diff options
author | Abseil Team <absl-team@google.com> | 2020-11-27 09:40:56 -0800 |
---|---|---|
committer | vslashg <gfalcon@google.com> | 2020-11-30 09:33:46 -0500 |
commit | e80c0b3536e1bdee68a874d529a9ba951faffe8b (patch) | |
tree | dc0616afdebacf15caa954df90e7942b256ef5d7 /absl/strings/internal/cord_internal.h | |
parent | 5d8fc9192245f0ea67094af57399d7931d6bd53f (diff) |
Export of internal Abseil changes
--
d85f04af95a6fdafb102f7dc393d78d4431b47e5 by Abseil Team <absl-team@google.com>:
Internal change for cord ring
PiperOrigin-RevId: 344541196
--
1ff57908e31a09ec0c98d8316da1263092cc3a1c by Abseil Team <absl-team@google.com>:
Fix typo in comment.
PiperOrigin-RevId: 344214280
GitOrigin-RevId: d85f04af95a6fdafb102f7dc393d78d4431b47e5
Change-Id: I58b3c28f62a5d10dd665b17d58a121f371e1260a
Diffstat (limited to 'absl/strings/internal/cord_internal.h')
-rw-r--r-- | absl/strings/internal/cord_internal.h | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/absl/strings/internal/cord_internal.h b/absl/strings/internal/cord_internal.h index 195a7988..ec2c767b 100644 --- a/absl/strings/internal/cord_internal.h +++ b/absl/strings/internal/cord_internal.h @@ -108,8 +108,9 @@ class Refcount { // functions in the base class. struct CordRepConcat; -struct CordRepSubstring; struct CordRepExternal; +struct CordRepFlat; +struct CordRepSubstring; // Various representations that we allow enum CordRepKind { @@ -180,6 +181,10 @@ struct CordRepExternal : public CordRep { const char* base; // Pointer to function that knows how to call and destroy the releaser. ExternalReleaserInvoker releaser_invoker; + + // Deletes (releases) the external rep. + // Requires rep != nullptr and rep->tag == EXTERNAL + static void Delete(CordRep* rep); }; struct Rank1 {}; @@ -220,6 +225,13 @@ struct CordRepExternalImpl } }; +inline void CordRepExternal::Delete(CordRep* rep) { + assert(rep != nullptr && rep->tag == EXTERNAL); + auto* rep_external = static_cast<CordRepExternal*>(rep); + assert(rep_external->releaser_invoker != nullptr); + rep_external->releaser_invoker(rep_external); +} + template <typename Str> struct ConstInitExternalStorage { ABSL_CONST_INIT static CordRepExternal value; |