Eine aufbereitete Darstellung der Quelle

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

Benutzer

Quelle  Array.h

  Sprache: C
 

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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 http://mozilla.org/MPL/2.0/. */


/* A compile-time constant-length array with bounds-checking assertions. */

#ifndef mozilla_Array_h
#define mozilla_Array_h

#include <stddef.h>

#include <iterator>
#include <ostream>
#include <utility>

#include "mozilla/Assertions.h"
#include "mozilla/Attributes.h"
#include "mozilla/Likely.h"

namespace mozilla {

template <typename T, size_t _Length>
class Array {
  T mArr[_Length];

 public:
  using ElementType = T;
  static constexpr size_t Length = _Length;

  constexpr Array() = default;

  template <typename... Args>
  MOZ_IMPLICIT constexpr Array(Args&&... aArgs)
      : mArr{std::forward<Args>(aArgs)...} {
    static_assert(sizeof...(aArgs) == Length,
                  "The number of arguments should be equal to the template "
                  "parameter Length");
  }

  constexpr T& operator[](size_t aIndex) {
    if (MOZ_UNLIKELY(aIndex >= Length)) {
      detail::InvalidArrayIndex_CRASH(aIndex, Length);
    }
    return mArr[aIndex];
  }

  constexpr const T& operator[](size_t aIndex) const {
    if (MOZ_UNLIKELY(aIndex >= Length)) {
      detail::InvalidArrayIndex_CRASH(aIndex, Length);
    }
    return mArr[aIndex];
  }

  bool operator==(const Array<T, Length>& aOther) const {
    for (size_t i = 0; i < Length; i++) {
      if (mArr[i] != aOther[i]) {
        return false;
      }
    }
    return true;
  }

  typedef T* iterator;
  typedef const T* const_iterator;
  typedef std::reverse_iterator<T*> reverse_iterator;
  typedef std::reverse_iterator<const T*> const_reverse_iterator;

  // Methods for range-based for loops.
  iterator begin() { return mArr; }
  constexpr const_iterator begin() const { return mArr; }
  constexpr const_iterator cbegin() const { return begin(); }
  iterator end() { return mArr + Length; }
  constexpr const_iterator end() const { return mArr + Length; }
  constexpr const_iterator cend() const { return end(); }

  // Method for std::size.
  constexpr size_t size() const { return Length; }

  // Methods for reverse iterating.
  reverse_iterator rbegin() { return reverse_iterator(end()); }
  const_reverse_iterator rbegin() const {
    return const_reverse_iterator(end());
  }
  const_reverse_iterator crbegin() const { return rbegin(); }
  reverse_iterator rend() { return reverse_iterator(begin()); }
  const_reverse_iterator rend() const {
    return const_reverse_iterator(begin());
  }
  const_reverse_iterator crend() const { return rend(); }
};

template <typename T>
class Array<T, 0> {
 public:
  T& operator[](size_t aIndex) { MOZ_CRASH("indexing into zero-length array"); }

  const T& operator[](size_t aIndex) const {
    MOZ_CRASH("indexing into zero-length array");
  }
};

// MOZ_DBG support

template <typename T, size_t Length>
std::ostream& operator<<(std::ostream& aOut, const Array<T, Length>& aArray) {
  return aOut << Span(aArray);
}

/* namespace mozilla */

#endif /* mozilla_Array_h */

Messung V0.5 in Prozent
C=92 H=98 G=94

¤ Dauer der Verarbeitung: 0.16 Sekunden  (vorverarbeitet am  2026-06-05) ¤

*© 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

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik