LCOV - code coverage report
Current view: top level - xpcom/base - nsID.h (source / functions) Hit Total Coverage
Test: output.info Lines: 11 13 84.6 %
Date: 2017-07-14 16:53:18 Functions: 3 4 75.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
       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 nsID_h__
       8             : #define nsID_h__
       9             : 
      10             : #include <string.h>
      11             : 
      12             : #include "nscore.h"
      13             : 
      14             : #define NSID_LENGTH 39
      15             : 
      16             : /**
      17             :  * A "unique identifier". This is modeled after OSF DCE UUIDs.
      18             :  */
      19             : 
      20             : struct nsID
      21             : {
      22             :   /**
      23             :    * @name Identifier values
      24             :    */
      25             : 
      26             :   //@{
      27             :   uint32_t m0;
      28             :   uint16_t m1;
      29             :   uint16_t m2;
      30             :   uint8_t m3[8];
      31             :   //@}
      32             : 
      33             :   /**
      34             :    * @name Methods
      35             :    */
      36             : 
      37             :   //@{
      38             :   /**
      39             :    * Ensures everything is zeroed out.
      40             :    */
      41             :   void Clear();
      42             : 
      43             :   /**
      44             :    * Equivalency method. Compares this nsID with another.
      45             :    * @return <b>true</b> if they are the same, <b>false</b> if not.
      46             :    */
      47             : 
      48     1953151 :   inline bool Equals(const nsID& aOther) const
      49             :   {
      50             :     // Unfortunately memcmp isn't faster than this.
      51             :     return
      52     2560324 :       (((uint32_t*)&m0)[0] == ((uint32_t*)&aOther.m0)[0]) &&
      53     1214346 :       (((uint32_t*)&m0)[1] == ((uint32_t*)&aOther.m0)[1]) &&
      54     3167497 :       (((uint32_t*)&m0)[2] == ((uint32_t*)&aOther.m0)[2]) &&
      55     2560324 :       (((uint32_t*)&m0)[3] == ((uint32_t*)&aOther.m0)[3]);
      56             :   }
      57             : 
      58           0 :   inline bool operator==(const nsID& aOther) const
      59             :   {
      60           0 :     return Equals(aOther);
      61             :   }
      62             : 
      63             :   /**
      64             :    * nsID Parsing method. Turns a {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
      65             :    * string into an nsID
      66             :    */
      67             :   bool Parse(const char* aIDStr);
      68             : 
      69             : #ifndef XPCOM_GLUE_AVOID_NSPR
      70             :   /**
      71             :    * nsID string encoder. Returns an allocated string in
      72             :    * {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} format. Caller should free string.
      73             :    * YOU SHOULD ONLY USE THIS IF YOU CANNOT USE ToProvidedString() BELOW.
      74             :    */
      75             :   char* ToString() const;
      76             : 
      77             :   /**
      78             :    * nsID string encoder. Builds a string in
      79             :    * {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} format, into a char[NSID_LENGTH]
      80             :    * buffer provided by the caller (for instance, on the stack).
      81             :    */
      82             :   void ToProvidedString(char (&aDest)[NSID_LENGTH]) const;
      83             : 
      84             : #endif // XPCOM_GLUE_AVOID_NSPR
      85             : 
      86             :   //@}
      87             : };
      88             : 
      89             : #ifndef XPCOM_GLUE_AVOID_NSPR
      90             : /**
      91             :  * A stack helper class to convert a nsID to a string.  Useful
      92             :  * for printing nsIDs.  For example:
      93             :  *   nsID aID = ...;
      94             :  *   printf("%s", nsIDToCString(aID).get());
      95             :  */
      96             : class nsIDToCString
      97             : {
      98             : public:
      99           5 :   explicit nsIDToCString(const nsID& aID)
     100           5 :   {
     101           5 :     aID.ToProvidedString(mStringBytes);
     102           5 :   }
     103             : 
     104           5 :   const char *get() const
     105             :   {
     106           5 :     return mStringBytes;
     107             :   }
     108             : 
     109             : protected:
     110             :   char mStringBytes[NSID_LENGTH];
     111             : };
     112             : #endif
     113             : 
     114             : /*
     115             :  * Class IDs
     116             :  */
     117             : 
     118             : typedef nsID nsCID;
     119             : 
     120             : // Define an CID
     121             : #define NS_DEFINE_CID(_name, _cidspec) \
     122             :   const nsCID _name = _cidspec
     123             : 
     124             : #define NS_DEFINE_NAMED_CID(_name) \
     125             :   static const nsCID k##_name = _name
     126             : 
     127             : #define REFNSCID const nsCID&
     128             : 
     129             : /**
     130             :  * An "interface id" which can be used to uniquely identify a given
     131             :  * interface.
     132             :  */
     133             : 
     134             : typedef nsID nsIID;
     135             : 
     136             : /**
     137             :  * A macro shorthand for <tt>const nsIID&<tt>
     138             :  */
     139             : 
     140             : #define REFNSIID const nsIID&
     141             : 
     142             : /**
     143             :  * Define an IID
     144             :  * obsolete - do not use this macro
     145             :  */
     146             : 
     147             : #define NS_DEFINE_IID(_name, _iidspec) \
     148             :   const nsIID _name = _iidspec
     149             : 
     150             : /**
     151             :  * A macro to build the static const IID accessor method. The Dummy
     152             :  * template parameter only exists so that the kIID symbol will be linked
     153             :  * properly (weak symbol on linux, gnu_linkonce on mac, multiple-definitions
     154             :  * merged on windows). Dummy should always be instantiated as "void".
     155             :  */
     156             : 
     157             : #define NS_DECLARE_STATIC_IID_ACCESSOR(the_iid)                         \
     158             :   template<typename T, typename U>                                      \
     159             :   struct COMTypeInfo;
     160             : 
     161             : #define NS_DEFINE_STATIC_IID_ACCESSOR(the_interface, the_iid)           \
     162             :   template<typename T>                                                  \
     163             :   struct the_interface::COMTypeInfo<the_interface, T> {                 \
     164             :     static const nsIID kIID NS_HIDDEN;                                  \
     165             :   };                                                                    \
     166             :   template<typename T>                                                  \
     167             :   const nsIID the_interface::COMTypeInfo<the_interface, T>::kIID NS_HIDDEN = the_iid;
     168             : 
     169             : /**
     170             :  * A macro to build the static const CID accessor method
     171             :  */
     172             : 
     173             : #define NS_DEFINE_STATIC_CID_ACCESSOR(the_cid) \
     174             :   static const nsID& GetCID() {static const nsID cid = the_cid; return cid;}
     175             : 
     176             : #define NS_GET_IID(T) (T::COMTypeInfo<T, void>::kIID)
     177             : #define NS_GET_TEMPLATE_IID(T) (T::template COMTypeInfo<T, void>::kIID)
     178             : 
     179             : #endif

Generated by: LCOV version 1.13