tor-browser

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

DDLogObject.h (1941B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef DDLogObject_h_
      8 #define DDLogObject_h_
      9 
     10 #include "nsString.h"
     11 
     12 namespace mozilla {
     13 
     14 // DDLogObject identifies a C++ object by its pointer and its class name (as
     15 // provided in a DDLoggedTypeTrait.)
     16 // Note that a DDLogObject could have the exact same pointer&type as a previous
     17 // one, so extra information is needed to distinguish them, see DDLifetime.
     18 class DDLogObject {
     19 public:
     20  // Default-initialization with null pointer.
     21  DDLogObject() : mTypeName("<unset>"), mPointer(nullptr) {}
     22 
     23  // Construction with given non-null type name and pointer.
     24  DDLogObject(const char* aTypeName, const void* aPointer)
     25      : mTypeName(aTypeName), mPointer(aPointer) {
     26    MOZ_ASSERT(aTypeName);
     27    MOZ_ASSERT(aPointer);
     28  }
     29 
     30  // Sets this DDLogObject to an actual object.
     31  void Set(const char* aTypeName, const void* aPointer) {
     32    MOZ_ASSERT(aTypeName);
     33    MOZ_ASSERT(aPointer);
     34    mTypeName = aTypeName;
     35    mPointer = aPointer;
     36  }
     37 
     38  // Object pointer, used for identification purposes only.
     39  const void* Pointer() const { return mPointer; }
     40 
     41  // Type name. Should only be accessed after non-null pointer initialization.
     42  const char* TypeName() const {
     43    MOZ_ASSERT(mPointer);
     44    return mTypeName;
     45  }
     46 
     47  bool operator==(const DDLogObject& a) const {
     48    return mPointer == a.mPointer && (!mPointer || mTypeName == a.mTypeName);
     49  }
     50 
     51  // Print the type name and pointer, e.g.: "MediaDecoder[136078200]".
     52  void AppendPrintf(nsCString& mString) const;
     53  nsCString Printf() const;
     54 
     55 private:
     56  const char* mTypeName;
     57  const void* mPointer;
     58 };
     59 
     60 }  // namespace mozilla
     61 
     62 #endif  // DDLogObject_h_