Optimize struct element initialization
[hiphop-php.git] / hphp / runtime / vm / reified-generics-info.h
blob0312edb4ff0a0d3a47652501711e2b5daa9be584
1 /*
2 +----------------------------------------------------------------------+
3 | HipHop for PHP |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 2010-present Facebook, Inc. (http://www.facebook.com) |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
17 #pragma once
19 #include <algorithm>
20 #include <stdint.h>
21 #include <vector>
23 namespace HPHP {
25 struct TypeParamInfo {
26 // Is the type parameter reified
27 bool m_isReified : 1;
28 // Does the type parameter contain a soft annotation
29 bool m_isSoft : 1;
30 // Does the type parameter contain a warn annotation
31 bool m_isWarn : 1;
35 * Struct that contains information regarding reified generics of a function
36 * or class
38 struct ReifiedGenericsInfo {
39 // Number of reified generics
40 size_t m_numReifiedGenerics;
41 // Whether it has any soft generics
42 bool m_hasSoftGenerics;
43 // Bitmap used to compare whether generics match in terms of parity in the
44 // fast path of CheckFunReifiedGenericMismatch
45 uint32_t m_bitmap;
46 // Information regarding each type parameter
47 std::vector<TypeParamInfo> m_typeParamInfo;
49 bool allGenericsSoft() const {
50 return !std::any_of(m_typeParamInfo.begin(), m_typeParamInfo.end(),
51 [](TypeParamInfo t) {
52 return !t.m_isSoft;
53 });