OLD | NEW |
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 from model import PropertyType | 5 from model import PropertyType |
6 | 6 |
7 | 7 |
8 _API_UTIL_NAMESPACE = 'json_schema_compiler::util' | 8 _API_UTIL_NAMESPACE = 'json_schema_compiler::util' |
9 | 9 |
10 | 10 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 if optional: | 48 if optional: |
49 val = '%(namespace)s::PopulateOptionalArrayFromList(*%(src)s, &%(dst)s)' | 49 val = '%(namespace)s::PopulateOptionalArrayFromList(*%(src)s, &%(dst)s)' |
50 else: | 50 else: |
51 val = '%(namespace)s::PopulateArrayFromList(*%(src)s, &%(dst)s)' | 51 val = '%(namespace)s::PopulateArrayFromList(*%(src)s, &%(dst)s)' |
52 return val % { | 52 return val % { |
53 'namespace': _API_UTIL_NAMESPACE, | 53 'namespace': _API_UTIL_NAMESPACE, |
54 'src': src, | 54 'src': src, |
55 'dst': dst | 55 'dst': dst |
56 } | 56 } |
57 | 57 |
58 def CreateValueFromArray(self, cpp_namespace, type_, src, optional): | 58 def CreateValueFromArray(self, |
| 59 src, |
| 60 optional=False, |
| 61 is_enum=False, |
| 62 enum_namespace=None): |
59 """Generates code to create a scoped_pt<Value> from the array at src. | 63 """Generates code to create a scoped_pt<Value> from the array at src. |
60 | 64 |
61 |cpp_namespace| The namespace which contains |type_|. This is needed for | 65 |enum_namespace| The namespace which contains |item_type|. This is needed |
62 enum conversions, where the ToString method is on the containing | 66 for enum conversions, where the ToString method is on the containing |
63 namespace. | 67 namespace. |
64 |type_| The type of the values being converted. This is needed for enum | 68 |item_type| The type of each array item of the values being converted. |
65 conversions, to know whether to use the Enum form of conversion. | 69 This is needed for enum conversions, to know whether to use the Enum |
| 70 form of conversion. |
66 |src| The variable to convert, either a vector or scoped_ptr<vector>. | 71 |src| The variable to convert, either a vector or scoped_ptr<vector>. |
67 |optional| Whether |type_| was optional. Optional types are pointers so | 72 |optional| Whether the whole array was optional. Optional types are |
68 must be treated differently. | 73 pointers so must be treated differently. |
| 74 |is_enum| Whether the values are enums. Enums are treated specially because |
| 75 they need their ToString() values called, not an integer. |
| 76 |enum_namespace| The namespace of the enum being converted, if any. |
| 77 The enum might not necessarily have a namespace. |
69 """ | 78 """ |
70 if type_.item_type.property_type == PropertyType.ENUM: | 79 if is_enum: |
71 # Enums are treated specially because C++ templating thinks that they're | 80 # Enums are treated specially because C++ templating thinks that they're |
72 # ints, but really they're strings. | 81 # ints, but really they're strings. |
73 if optional: | 82 if optional: |
74 name = 'CreateValueFromOptionalEnumArray<%s>' % cpp_namespace | 83 name = 'CreateValueFromOptionalEnumArray' |
75 else: | 84 else: |
76 name = 'CreateValueFromEnumArray<%s>' % cpp_namespace | 85 name = 'CreateValueFromEnumArray' |
| 86 if enum_namespace: |
| 87 name += '<%s>' % enum_namespace |
| 88 else: |
| 89 name += 'WithoutNamespace' |
77 else: | 90 else: |
78 if optional: | 91 if optional: |
79 name = 'CreateValueFromOptionalArray' | 92 name = 'CreateValueFromOptionalArray' |
80 else: | 93 else: |
81 name = 'CreateValueFromArray' | 94 name = 'CreateValueFromArray' |
82 return '%s::%s(%s)' % (_API_UTIL_NAMESPACE, name, src) | 95 return '%s::%s(%s)' % (_API_UTIL_NAMESPACE, name, src) |
83 | 96 |
84 def GetIncludePath(self): | 97 def GetIncludePath(self): |
85 return '#include "tools/json_schema_compiler/util.h"' | 98 return '#include "tools/json_schema_compiler/util.h"' |
86 | 99 |
87 def GetValueTypeString(self, value, is_ptr=False): | 100 def GetValueTypeString(self, value, is_ptr=False): |
88 call = '.GetType()' | 101 call = '.GetType()' |
89 if is_ptr: | 102 if is_ptr: |
90 call = '->GetType()' | 103 call = '->GetType()' |
91 return 'json_schema_compiler::util::ValueTypeToString(%s%s)' % (value, call) | 104 return 'json_schema_compiler::util::ValueTypeToString(%s%s)' % (value, call) |
OLD | NEW |