|
29 | 29 | import uk.co.real_logic.artio.dictionary.ir.Field.Type;
|
30 | 30 | import uk.co.real_logic.artio.fields.*;
|
31 | 31 | import uk.co.real_logic.artio.util.MessageTypeEncoding;
|
| 32 | +import uk.co.real_logic.artio.util.float_parsing.DecimalFloatOverflowHandler; |
32 | 33 |
|
33 | 34 | import java.io.IOException;
|
34 | 35 | import java.io.Writer;
|
@@ -134,9 +135,42 @@ static String decoderClassName(final String name)
|
134 | 135 | final boolean wrapEmptyBuffer,
|
135 | 136 | final String codecRejectUnknownEnumValueEnabled,
|
136 | 137 | final boolean fixTagsInJavadoc)
|
| 138 | + { |
| 139 | + this(dictionary, |
| 140 | + initialBufferSize, |
| 141 | + thisPackage, |
| 142 | + commonPackage, |
| 143 | + encoderPackage, |
| 144 | + outputManager, |
| 145 | + validationClass, |
| 146 | + rejectUnknownFieldClass, |
| 147 | + rejectUnknownEnumValueClass, |
| 148 | + flyweightsEnabled, |
| 149 | + wrapEmptyBuffer, |
| 150 | + codecRejectUnknownEnumValueEnabled, |
| 151 | + fixTagsInJavadoc, |
| 152 | + null); |
| 153 | + } |
| 154 | + |
| 155 | + DecoderGenerator( |
| 156 | + final Dictionary dictionary, |
| 157 | + final int initialBufferSize, |
| 158 | + final String thisPackage, |
| 159 | + final String commonPackage, |
| 160 | + final String encoderPackage, |
| 161 | + final OutputManager outputManager, |
| 162 | + final Class<?> validationClass, |
| 163 | + final Class<?> rejectUnknownFieldClass, |
| 164 | + final Class<?> rejectUnknownEnumValueClass, |
| 165 | + final boolean flyweightsEnabled, |
| 166 | + final boolean wrapEmptyBuffer, |
| 167 | + final String codecRejectUnknownEnumValueEnabled, |
| 168 | + final boolean fixTagsInJavadoc, |
| 169 | + final Class<? extends DecimalFloatOverflowHandler> decimalFloatOverflowHandler) |
137 | 170 | {
|
138 | 171 | super(dictionary, thisPackage, commonPackage, outputManager, validationClass, rejectUnknownFieldClass,
|
139 |
| - rejectUnknownEnumValueClass, flyweightsEnabled, codecRejectUnknownEnumValueEnabled, fixTagsInJavadoc); |
| 172 | + rejectUnknownEnumValueClass, flyweightsEnabled, codecRejectUnknownEnumValueEnabled, fixTagsInJavadoc, |
| 173 | + decimalFloatOverflowHandler); |
140 | 174 | this.initialBufferSize = initialBufferSize;
|
141 | 175 | this.encoderPackage = encoderPackage;
|
142 | 176 | this.wrapEmptyBuffer = wrapEmptyBuffer;
|
@@ -192,6 +226,11 @@ else if (type == HEADER)
|
192 | 226 |
|
193 | 227 | importEncoders(aggregate, out);
|
194 | 228 |
|
| 229 | + if (decimalFloatOverflowHandler != null) |
| 230 | + { |
| 231 | + out.append(importFor(decimalFloatOverflowHandler)); |
| 232 | + } |
| 233 | + |
195 | 234 | generateAggregateClass(aggregate, type, className, out);
|
196 | 235 | });
|
197 | 236 | }
|
@@ -255,6 +294,13 @@ else if (type == HEADER)
|
255 | 294 | }
|
256 | 295 |
|
257 | 296 | out.append(classDeclaration(className, interfaces, false, aggregate.isInParent(), isGroup));
|
| 297 | + if (decimalFloatOverflowHandler != null && type != HEADER) |
| 298 | + { |
| 299 | + out.append(String.format(" public %s() {\n\n", className)); |
| 300 | + out.append(String.format(" decimalFloatOverflowHandler = new %s", |
| 301 | + decimalFloatOverflowHandler.getSimpleName() + "();\n\n")); |
| 302 | + out.append(" }\n\n"); |
| 303 | + } |
258 | 304 | generateValidation(out, aggregate, type);
|
259 | 305 | if (isMessage)
|
260 | 306 | {
|
@@ -2041,7 +2087,8 @@ private String fieldDecodeMethod(final Field field, final String fieldName)
|
2041 | 2087 | return "";
|
2042 | 2088 | }
|
2043 | 2089 | decodeMethod = String.format(
|
2044 |
| - "getFloat(buffer, %s, valueOffset, valueLength, %d, " + CODEC_VALIDATION_ENABLED + ")", |
| 2090 | + "getFloat(buffer, %s, valueOffset, valueLength, %d, " + CODEC_VALIDATION_ENABLED + |
| 2091 | + ", decimalFloatOverflowHandler)", |
2045 | 2092 | fieldName, field.number());
|
2046 | 2093 | break;
|
2047 | 2094 | case CHAR:
|
|
0 commit comments