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