1 | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
---|
2 | /* ***** BEGIN LICENSE BLOCK ***** |
---|
3 | * Version: NPL 1.1/GPL 2.0/LGPL 2.1 |
---|
4 | * |
---|
5 | * The contents of this file are subject to the Netscape Public License |
---|
6 | * Version 1.1 (the "License"); you may not use this file except in |
---|
7 | * compliance with the License. You may obtain a copy of the License at |
---|
8 | * http://www.mozilla.org/NPL/ |
---|
9 | * |
---|
10 | * Software distributed under the License is distributed on an "AS IS" basis, |
---|
11 | * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
---|
12 | * for the specific language governing rights and limitations under the |
---|
13 | * License. |
---|
14 | * |
---|
15 | * The Original Code is mozilla.org code. |
---|
16 | * |
---|
17 | * The Initial Developer of the Original Code is |
---|
18 | * Netscape Communications Corporation. |
---|
19 | * Portions created by the Initial Developer are Copyright (C) 1998 |
---|
20 | * the Initial Developer. All Rights Reserved. |
---|
21 | * |
---|
22 | * Contributor(s): |
---|
23 | * |
---|
24 | * Alternatively, the contents of this file may be used under the terms of |
---|
25 | * either the GNU General Public License Version 2 or later (the "GPL"), or |
---|
26 | * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
---|
27 | * in which case the provisions of the GPL or the LGPL are applicable instead |
---|
28 | * of those above. If you wish to allow use of your version of this file only |
---|
29 | * under the terms of either the GPL or the LGPL, and not to allow others to |
---|
30 | * use your version of this file under the terms of the NPL, indicate your |
---|
31 | * decision by deleting the provisions above and replace them with the notice |
---|
32 | * and other provisions required by the GPL or the LGPL. If you do not delete |
---|
33 | * the provisions above, a recipient may use your version of this file under |
---|
34 | * the terms of any one of the NPL, the GPL or the LGPL. |
---|
35 | * |
---|
36 | * ***** END LICENSE BLOCK ***** */ |
---|
37 | |
---|
38 | #ifndef nsID_h__ |
---|
39 | #define nsID_h__ |
---|
40 | |
---|
41 | #include <string.h> |
---|
42 | |
---|
43 | #ifndef nscore_h___ |
---|
44 | #include "nscore.h" |
---|
45 | #endif |
---|
46 | |
---|
47 | /** |
---|
48 | * A "unique identifier". This is modeled after OSF DCE UUIDs. |
---|
49 | * @status FROZEN |
---|
50 | */ |
---|
51 | |
---|
52 | struct nsID { |
---|
53 | /** |
---|
54 | * @name Indentifier values |
---|
55 | */ |
---|
56 | |
---|
57 | //@{ |
---|
58 | PRUint32 m0; |
---|
59 | PRUint16 m1; |
---|
60 | PRUint16 m2; |
---|
61 | PRUint8 m3[8]; |
---|
62 | //@} |
---|
63 | |
---|
64 | /** |
---|
65 | * @name Methods |
---|
66 | */ |
---|
67 | |
---|
68 | //@{ |
---|
69 | /** |
---|
70 | * Equivalency method. Compares this nsID with another. |
---|
71 | * @return <b>PR_TRUE</b> if they are the same, <b>PR_FALSE</b> if not. |
---|
72 | */ |
---|
73 | |
---|
74 | inline PRBool Equals(const nsID& other) const { |
---|
75 | // One would think that this could be done faster with a really |
---|
76 | // efficient implementation of memcmp(), but evidently no |
---|
77 | // memcmp()'s out there are better than this code. |
---|
78 | // |
---|
79 | // See bug http://bugzilla.mozilla.org/show_bug.cgi?id=164580 for |
---|
80 | // details. |
---|
81 | |
---|
82 | return (PRBool) |
---|
83 | ((((PRUint32*) &m0)[0] == ((PRUint32*) &other.m0)[0]) && |
---|
84 | (((PRUint32*) &m0)[1] == ((PRUint32*) &other.m0)[1]) && |
---|
85 | (((PRUint32*) &m0)[2] == ((PRUint32*) &other.m0)[2]) && |
---|
86 | (((PRUint32*) &m0)[3] == ((PRUint32*) &other.m0)[3])); |
---|
87 | } |
---|
88 | |
---|
89 | /** |
---|
90 | * nsID Parsing method. Turns a {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} |
---|
91 | * string into an nsID |
---|
92 | */ |
---|
93 | NS_COM PRBool Parse(const char *aIDStr); |
---|
94 | |
---|
95 | /** |
---|
96 | * nsID string encoder. Returns an allocated string in |
---|
97 | * {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} format. Caller should free string. |
---|
98 | */ |
---|
99 | NS_COM char* ToString() const; |
---|
100 | //@} |
---|
101 | }; |
---|
102 | |
---|
103 | /* |
---|
104 | * Class IDs |
---|
105 | */ |
---|
106 | |
---|
107 | typedef nsID nsCID; |
---|
108 | |
---|
109 | // Define an CID |
---|
110 | #define NS_DEFINE_CID(_name, _cidspec) \ |
---|
111 | const nsCID _name = _cidspec |
---|
112 | |
---|
113 | #define REFNSCID const nsCID& |
---|
114 | |
---|
115 | /** |
---|
116 | * An "interface id" which can be used to uniquely identify a given |
---|
117 | * interface. |
---|
118 | */ |
---|
119 | |
---|
120 | typedef nsID nsIID; |
---|
121 | |
---|
122 | /** |
---|
123 | * A macro shorthand for <tt>const nsIID&<tt> |
---|
124 | */ |
---|
125 | |
---|
126 | #define REFNSIID const nsIID& |
---|
127 | |
---|
128 | /** |
---|
129 | * Define an IID |
---|
130 | * obsolete - do not use this macro |
---|
131 | */ |
---|
132 | |
---|
133 | #define NS_DEFINE_IID(_name, _iidspec) \ |
---|
134 | const nsIID _name = _iidspec |
---|
135 | |
---|
136 | /** |
---|
137 | * A macro to build the static const IID accessor method |
---|
138 | */ |
---|
139 | |
---|
140 | #define NS_DEFINE_STATIC_IID_ACCESSOR(the_iid) \ |
---|
141 | static const nsIID& GetIID() {static const nsIID iid = the_iid; return iid;} |
---|
142 | |
---|
143 | /** |
---|
144 | * A macro to build the static const CID accessor method |
---|
145 | */ |
---|
146 | |
---|
147 | #define NS_DEFINE_STATIC_CID_ACCESSOR(the_cid) \ |
---|
148 | static const nsID& GetCID() {static const nsID cid = the_cid; return cid;} |
---|
149 | |
---|
150 | #endif |
---|
151 | |
---|