# HG changeset patch # User pliden # Date 1552473060 -3600 # Node ID 48a02303574e4f53bbc5e10ad56a297e1893cea4 # Parent efb8569c95d575f09ec56a2fbf4d1248b3222fef 8219816: Add IsArray/RemoveExtent type traits utilities Reviewed-by: kbarrett, eosterlund diff -r efb8569c95d5 -r 48a02303574e src/hotspot/share/metaprogramming/isArray.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hotspot/share/metaprogramming/isArray.hpp Wed Mar 13 11:31:00 2019 +0100 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_METAPROGRAMMING_ISARRAY_HPP +#define SHARE_METAPROGRAMMING_ISARRAY_HPP + +#include "metaprogramming/integralConstant.hpp" + +template struct IsArray: public FalseType {}; + +template struct IsArray: public TrueType {}; +template struct IsArray: public TrueType {}; + +#endif // SHARE_METAPROGRAMMING_ISARRAY_HPP diff -r efb8569c95d5 -r 48a02303574e src/hotspot/share/metaprogramming/removeExtent.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hotspot/share/metaprogramming/removeExtent.hpp Wed Mar 13 11:31:00 2019 +0100 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_METAPROGRAMMING_REMOVEEXTENT_HPP +#define SHARE_METAPROGRAMMING_REMOVEEXTENT_HPP + +#include "memory/allocation.hpp" + +template struct RemoveExtent: AllStatic { typedef T type; }; + +template struct RemoveExtent: AllStatic { typedef T type; }; +template struct RemoveExtent: AllStatic { typedef T type; }; + +#endif // SHARE_METAPROGRAMMING_REMOVEEXTENT_HPP diff -r efb8569c95d5 -r 48a02303574e test/hotspot/gtest/metaprogramming/test_isArray.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/gtest/metaprogramming/test_isArray.cpp Wed Mar 13 11:31:00 2019 +0100 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "memory/allocation.hpp" +#include "metaprogramming/isArray.hpp" +#include "utilities/debug.hpp" + +class IsArrayTest: AllStatic { + class A: AllStatic {}; + + static const bool ia_A = IsArray::value; + STATIC_ASSERT(!ia_A); + + static const bool ia_Aptr = IsArray::value; + STATIC_ASSERT(!ia_Aptr); + + static const bool ia_Aarr = IsArray::value; + STATIC_ASSERT(ia_Aarr); + + static const bool ia_Aarr10 = IsArray::value; + STATIC_ASSERT(ia_Aarr10); + + static const bool ia_Aptrarr10 = IsArray::value; + STATIC_ASSERT(ia_Aptrarr10); + + static const bool ia_Aarr10arr10 = IsArray::value; + STATIC_ASSERT(ia_Aarr10arr10); + + static const bool ia_cAarr = IsArray::value; + STATIC_ASSERT(ia_cAarr); + + static const bool ia_vAarr = IsArray::value; + STATIC_ASSERT(ia_vAarr); + + static const bool ia_cAarr10 = IsArray::value; + STATIC_ASSERT(ia_cAarr10); + + static const bool ia_vAarr10 = IsArray::value; + STATIC_ASSERT(ia_vAarr10); + + static const bool ia_voidptr = IsArray::value; + STATIC_ASSERT(!ia_voidptr); + + static const bool ia_intptrt = IsArray::value; + STATIC_ASSERT(!ia_intptrt); + + static const bool ia_char = IsArray::value; + STATIC_ASSERT(!ia_char); +}; diff -r efb8569c95d5 -r 48a02303574e test/hotspot/gtest/metaprogramming/test_removeExtent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/gtest/metaprogramming/test_removeExtent.cpp Wed Mar 13 11:31:00 2019 +0100 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "memory/allocation.hpp" +#include "metaprogramming/removeExtent.hpp" +#include "metaprogramming/isSame.hpp" +#include "utilities/debug.hpp" + +class RemoveExtentTest { + class A: AllStatic {}; + + typedef A* Aptr; + typedef A Aarr[]; + typedef A Aarr10[10]; + typedef const A cA; + typedef const A* cAptr; + typedef const A cAarr[]; + typedef const A cAarr10[10]; + + typedef RemoveExtent::type ra_Aptr; + static const bool ra_Aptr_is_Aptr = IsSame::value; + STATIC_ASSERT(ra_Aptr_is_Aptr); + + typedef RemoveExtent::type ra_Aarr; + static const bool ra_Aarr_is_A = IsSame::value; + STATIC_ASSERT(ra_Aarr_is_A); + + typedef RemoveExtent::type ra_Aarr10; + static const bool ra_Aarr10_is_A = IsSame::value; + STATIC_ASSERT(ra_Aarr10_is_A); + + typedef RemoveExtent::type ra_cAptr; + static const bool ra_cAptr_is_cAptr = IsSame::value; + STATIC_ASSERT(ra_cAptr_is_cAptr); + + typedef RemoveExtent::type ra_cAarr; + static const bool ra_cAarr_is_cA = IsSame::value; + STATIC_ASSERT(ra_cAarr_is_cA); + + typedef RemoveExtent::type ra_cAarr10; + static const bool ra_cAarr10_is_cA = IsSame::value; + STATIC_ASSERT(ra_cAarr10_is_cA); +};