tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

FormatBuffer.h (2237B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #ifndef intl_components_FormatBuffer_h
      6 #define intl_components_FormatBuffer_h
      7 
      8 /**
      9 * This file contains public adaptors for the mozilla::intl Buffer template
     10 * argument. Adaptors that can automatically be deduced are kept as private
     11 * in ICU4CGlue.h. There is also the SpiderMonkey specific adaptor
     12 * js::intl::FormatBuffer in js/src/builtin/intl/FormatBuffer.h.
     13 */
     14 
     15 #include "nsTString.h"
     16 
     17 namespace mozilla::intl {
     18 
     19 /**
     20 * mozilla::intl APIs require sizeable buffers. This class abstracts over
     21 * the nsTSubstring.
     22 */
     23 template <typename T>
     24 class nsTStringToBufferAdapter {
     25 public:
     26  using CharType = T;
     27 
     28  // Do not allow copy or move. Move could be added in the future if needed.
     29  nsTStringToBufferAdapter(const nsTStringToBufferAdapter&) = delete;
     30  nsTStringToBufferAdapter& operator=(const nsTStringToBufferAdapter&) = delete;
     31 
     32  explicit nsTStringToBufferAdapter(nsTSubstring<CharType>& aString)
     33      : mString(aString) {}
     34 
     35  /**
     36   * Ensures the buffer has enough space to accommodate |size| elements.
     37   */
     38  [[nodiscard]] bool reserve(size_t size) {
     39    return mString.SetLength(size, fallible);
     40  }
     41 
     42  /**
     43   * Returns the raw data inside the buffer.
     44   */
     45  CharType* data() { return mString.BeginWriting(); }
     46 
     47  /**
     48   * Returns the count of elements written into the buffer.
     49   */
     50  size_t length() const { return mString.Length(); }
     51 
     52  /**
     53   * Returns the buffer's overall capacity.
     54   */
     55  size_t capacity() const {
     56    // nsString's Capacity() method is protected, so just return the length.
     57    return mString.Length();
     58  }
     59 
     60  /**
     61   * Resizes the buffer to the given amount of written elements.
     62   */
     63  void written(size_t amount) {
     64    MOZ_ASSERT(amount <= mString.Length());
     65    // This sets |mString|'s internal size so that it matches how much was
     66    // written. This is necessary because the write happens across FFI
     67    // boundaries.
     68    mString.SetLength(amount);
     69  }
     70 
     71 private:
     72  nsTSubstring<CharType>& mString;
     73 };
     74 
     75 }  // namespace mozilla::intl
     76 
     77 #endif /* intl_components_FormatBuffer_h */