Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  BaseArray.h   Sprache: C

 

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */


#ifndef BASEARRAY_H
#define BASEARRAY_H

#include "BaseAlloc.h"

#include "mozilla/Assertions.h"
#include "mozilla/CheckedInt.h"

//---------------------------------------------------------------------------
// Array implementation
//---------------------------------------------------------------------------

// Unlike mfbt/Array.h this array has a dynamic size, but unlike a vector its
// size is set explicitly rather than grown as needed.
// It uses the base allocator to allocate / free, shrink and grow its
// storage.
template <typename T>
class BaseArray {
 private:
  size_t mCapacity = 0;
  T* mArray = nullptr;

 public:
  BaseArray() {}

  ~BaseArray() {
    for (size_t i = 0; i < mCapacity; i++) {
      mArray[i].~T();
    }
    sBaseAlloc.free(mArray);
  }

  const T& operator[](size_t aIndex) const {
    MOZ_ASSERT(aIndex < mCapacity);
    return mArray[aIndex];
  }
  T& operator[](size_t aIndex) {
    MOZ_ASSERT(aIndex < mCapacity);
    return mArray[aIndex];
  }

  T* begin() { return mArray; }
  const T* begin() const { return mArray; }
  const T* end() const { return &mArray[mCapacity]; }

  bool Init(size_t aCapacity) {
    MOZ_ASSERT(mCapacity == 0);
    MOZ_ASSERT(mArray == nullptr);

    auto size_bytes = mozilla::CheckedInt<size_t>(sizeof(T)) * aCapacity;
    MOZ_ASSERT(size_bytes.isValid());
    if (!size_bytes.isValid()) {
      return false;
    }

    mArray = reinterpret_cast<T*>(sBaseAlloc.alloc(size_bytes.value()));
    if (!mArray) {
      return false;
    }

    for (size_t i = 0; i < aCapacity; i++) {
      new (&mArray[i]) T();
    }
    mCapacity = aCapacity;

    return true;
  }

  size_t Capacity() const { return mCapacity; }

  bool GrowTo(size_t aNewCapacity) {
    MOZ_ASSERT(aNewCapacity > mCapacity);
    if (mCapacity == 0) {
      return Init(aNewCapacity);
    }
    auto size_bytes = mozilla::CheckedInt<size_t>(sizeof(T)) * aNewCapacity;
    MOZ_ASSERT(size_bytes.isValid());
    if (!size_bytes.isValid()) {
      return false;
    }

    T* new_array =
        reinterpret_cast<T*>(sBaseAlloc.realloc(mArray, size_bytes.value()));
    if (!new_array) {
      return false;
    }
    mArray = new_array;

    for (size_t i = mCapacity; i < aNewCapacity; i++) {
      new (&mArray[i]) T();
    }
    mCapacity = aNewCapacity;
    return true;
  }

  size_t SizeOfExcludingThis() { return sBaseAlloc.usable_size(mArray); }
};

#endif /* ! BASEARRAY_H */

Messung V0.5 in Prozent
C=92 H=89 G=90

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet am  2026-09-27) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126438
#Domains=1867298