Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/toolkit/components/url-classifier/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 2 kB image not shown  

Quelle  ChunkSet.h   Sprache: C

 
//* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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/. */


#ifndef ChunkSet_h__
#define ChunkSet_h__

#include "Entries.h"
#include "nsString.h"
#include "nsTArray.h"

namespace mozilla {
namespace safebrowsing {

/**
 * Store the chunk numbers as an array of ranges of uint32_t.
 * We need chunk numbers in order to ask for incremental updates from the
 * server.
 */

class ChunkSet {
 public:
  nsresult Serialize(nsACString& aStr);
  nsresult Set(uint32_t aChunk);
  bool Has(uint32_t chunk) const;
  nsresult Merge(const ChunkSet& aOther);
  uint32_t Length() const;
  nsresult Remove(const ChunkSet& aOther);
  void Clear();

  nsresult Write(nsIOutputStream* aOut) const;
  nsresult Read(nsIInputStream* aIn, uint32_t aNumElements);

  ChunkSet InfallibleClone() const {
    ChunkSet result;
    if (!result.mRanges.Assign(mRanges, fallible)) {
      MOZ_CRASH("Out of memory");
    }
    return result;
  }

 private:
  class Range {
   public:
    Range(uint32_t aBegin, uint32_t aEnd) : mBegin(aBegin), mEnd(aEnd) {}

    uint32_t Length() const;
    nsresult Remove(const Range& aRange, ChunkSet& aRemainderSet) const;
    bool FoldLeft(const Range& aRange);

    bool operator==(const Range& rhs) const { return mBegin == rhs.mBegin; }
    bool operator<(const Range& rhs) const { return mBegin < rhs.mBegin; }

    uint32_t Begin() const { return mBegin; }
    void Begin(const uint32_t aBegin) { mBegin = aBegin; }
    uint32_t End() const { return mEnd; }
    void End(const uint32_t aEnd) { mEnd = aEnd; }

    bool Contains(const Range& aRange) const {
      return mBegin <= aRange.mBegin && aRange.mEnd <= mEnd;
    }
    bool Precedes(const Range& aRange) const {
      return mEnd + 1 == aRange.mBegin;
    }

    struct IntersectionComparator {
      int operator()(const Range& aRange) const {
        if (aRange.mBegin > mTarget.mEnd) {
          return -1;
        }
        if (mTarget.mBegin > aRange.mEnd) {
          return 1;
        }
        return 0;
      }

      explicit IntersectionComparator(const Range& aTarget)
          : mTarget(aTarget) {}
      const Range& mTarget;
    };

   private:
    uint32_t mBegin;
    uint32_t mEnd;
  };

  static const size_t IO_BUFFER_SIZE = 1024;
  FallibleTArray<Range> mRanges;

  bool HasSubrange(const Range& aSubrange) const;
};

}  // namespace safebrowsing
}  // namespace mozilla

#endif

Messung V0.5
C=95 H=100 G=97

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

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.