macros.h revision 59e85cd3c415ca483318bd7e4d5e743253b64685
16c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// Copyright 2010 Google
26c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// Licensed under the Apache License, Version 2.0 (the "License");
36c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// you may not use this file except in compliance with the License.
46c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// You may obtain a copy of the License at
56c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro//
66c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro//     http://www.apache.org/licenses/LICENSE-2.0
76c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro//
86c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// Unless required by applicable law or agreed to in writing, software
96c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// distributed under the License is distributed on an "AS IS" BASIS,
106c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
116c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// See the License for the specific language governing permissions and
126c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// limitations under the License.
136c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro
14806defae80d39945272e1cd919b1c22572152117Carl Shapiro#ifndef ART_MACROS_H_
15806defae80d39945272e1cd919b1c22572152117Carl Shapiro#define ART_MACROS_H_
166c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro
176c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// DISALLOW_COPY_AND_ASSIGN disallows the copy and operator= functions.
186c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// It goes in the private: declarations in a class.
196c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
206c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro  TypeName(const TypeName&);               \
216c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro  void operator=(const TypeName&)
226c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro
236c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// A macro to disallow all the implicit constructors, namely the
246c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// default constructor, copy constructor and operator= functions.
256c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro//
266c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// This should be used in the private: declarations for a class
276c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// that wants to prevent anyone from instantiating it. This is
286c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro// especially useful for classes containing only static methods.
296c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \
306c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro  TypeName();                                    \
316c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro  DISALLOW_COPY_AND_ASSIGN(TypeName)
326c21dc1bcafd83e90daa42a27dacd285278f3667Carl Shapiro
3359e85cd3c415ca483318bd7e4d5e743253b64685Carl Shapiro#define SIZEOF_MEMBER(t, f) sizeof(((t*) 4096)->f)
3459e85cd3c415ca483318bd7e4d5e743253b64685Carl Shapiro
3559e85cd3c415ca483318bd7e4d5e743253b64685Carl Shapiro#define OFFSETOF_MEMBER(t, f)         \
3659e85cd3c415ca483318bd7e4d5e743253b64685Carl Shapiro  (reinterpret_cast<char*>(           \
3759e85cd3c415ca483318bd7e4d5e743253b64685Carl Shapiro     &reinterpret_cast<t*>(16)->f) -  \
3859e85cd3c415ca483318bd7e4d5e743253b64685Carl Shapiro   reinterpret_cast<char*>(16))
3959e85cd3c415ca483318bd7e4d5e743253b64685Carl Shapiro
40806defae80d39945272e1cd919b1c22572152117Carl Shapiro#endif  // ART_MACROS_H_
41