00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 package org.ros.internal.message.field;
00018
00019 import com.google.common.base.Preconditions;
00020 import com.google.common.collect.ImmutableSet;
00021
00022 import org.jboss.netty.buffer.ChannelBuffer;
00023 import org.ros.message.Duration;
00024 import org.ros.message.Time;
00025
00026 import java.nio.ByteBuffer;
00027 import java.nio.charset.Charset;
00028
00032 public enum PrimitiveFieldType implements FieldType {
00033
00034 BOOL {
00035 @SuppressWarnings("unchecked")
00036 @Override
00037 public Boolean getDefaultValue() {
00038 return Boolean.FALSE;
00039 }
00040
00041 @Override
00042 public BooleanArrayField newVariableList(String name, int size) {
00043 return BooleanArrayField.newVariable(name, size);
00044 }
00045
00046 @Override
00047 public int getSerializedSize() {
00048 return 1;
00049 }
00050
00051 @Override
00052 public <T> void serialize(T value, ChannelBuffer buffer) {
00053 Preconditions.checkArgument(value instanceof Boolean);
00054 buffer.writeByte((byte) ((Boolean) value ? 1 : 0));
00055 }
00056
00057 @SuppressWarnings("unchecked")
00058 @Override
00059 public Boolean deserialize(ChannelBuffer buffer) {
00060 return buffer.readByte() == 1;
00061 }
00062
00063 @SuppressWarnings("unchecked")
00064 @Override
00065 public Boolean parseFromString(String value) {
00066 return value.equals("1");
00067 }
00068
00069 @Override
00070 public String getJavaTypeName() {
00071 return "boolean";
00072 }
00073 },
00074 INT8 {
00075 @SuppressWarnings("unchecked")
00076 @Override
00077 public Byte getDefaultValue() {
00078 return Byte.valueOf((byte) 0);
00079 }
00080
00081 @Override
00082 public Field newVariableList(String name, int size) {
00083 return ChannelBufferField.newVariable(this, name, size);
00084 }
00085
00086 @Override
00087 public int getSerializedSize() {
00088 return 1;
00089 }
00090
00091 @Override
00092 public <T> void serialize(T value, ChannelBuffer buffer) {
00093 Preconditions.checkArgument(value instanceof Byte);
00094 buffer.writeByte((Byte) value);
00095 }
00096
00097 @SuppressWarnings("unchecked")
00098 @Override
00099 public Byte deserialize(ChannelBuffer buffer) {
00100 return buffer.readByte();
00101 }
00102
00103 @SuppressWarnings("unchecked")
00104 @Override
00105 public Byte parseFromString(String value) {
00106 return Byte.parseByte(value);
00107 }
00108
00109 @Override
00110 public String getJavaTypeName() {
00111 return "byte";
00112 }
00113 },
00117 BYTE {
00118 @SuppressWarnings("unchecked")
00119 @Override
00120 public Byte getDefaultValue() {
00121 return INT8.getDefaultValue();
00122 }
00123
00124 @Override
00125 public Field newVariableList(String name, int size) {
00126 return ChannelBufferField.newVariable(this, name, size);
00127 }
00128
00129 @Override
00130 public int getSerializedSize() {
00131 return INT8.getSerializedSize();
00132 }
00133
00134 @Override
00135 public <T> void serialize(T value, ChannelBuffer buffer) {
00136 INT8.serialize(value, buffer);
00137 }
00138
00139 @SuppressWarnings("unchecked")
00140 @Override
00141 public Byte deserialize(ChannelBuffer buffer) {
00142 return INT8.deserialize(buffer);
00143 }
00144
00145 @SuppressWarnings("unchecked")
00146 @Override
00147 public Byte parseFromString(String value) {
00148 return INT8.parseFromString(value);
00149 }
00150
00151 @Override
00152 public String getJavaTypeName() {
00153 return INT8.getJavaTypeName();
00154 }
00155 },
00156 UINT8 {
00157 @SuppressWarnings("unchecked")
00158 @Override
00159 public Byte getDefaultValue() {
00160 return INT8.getDefaultValue();
00161 }
00162
00163 @Override
00164 public Field newVariableList(String name, int size) {
00165 return ChannelBufferField.newVariable(this, name, size);
00166 }
00167
00168 @Override
00169 public int getSerializedSize() {
00170 return INT8.getSerializedSize();
00171 }
00172
00173 @Override
00174 public <T> void serialize(T value, ChannelBuffer buffer) {
00175 INT8.serialize(value, buffer);
00176 }
00177
00178 @SuppressWarnings("unchecked")
00179 @Override
00180 public Byte deserialize(ChannelBuffer buffer) {
00181 return INT8.deserialize(buffer);
00182 }
00183
00184 @SuppressWarnings("unchecked")
00185 @Override
00186 public Byte parseFromString(String value) {
00187 return (byte) Short.parseShort(value);
00188 }
00189
00190 @Override
00191 public String getJavaTypeName() {
00192 return INT8.getJavaTypeName();
00193 }
00194 },
00198 CHAR {
00199 @SuppressWarnings("unchecked")
00200 @Override
00201 public Byte getDefaultValue() {
00202 return UINT8.getDefaultValue();
00203 }
00204
00205 @Override
00206 public Field newVariableList(String name, int size) {
00207 return ChannelBufferField.newVariable(this, name, size);
00208 }
00209
00210 @Override
00211 public int getSerializedSize() {
00212 return UINT8.getSerializedSize();
00213 }
00214
00215 @Override
00216 public <T> void serialize(T value, ChannelBuffer buffer) {
00217 UINT8.serialize(value, buffer);
00218 }
00219
00220 @SuppressWarnings("unchecked")
00221 @Override
00222 public Byte deserialize(ChannelBuffer buffer) {
00223 return UINT8.deserialize(buffer);
00224 }
00225
00226 @SuppressWarnings("unchecked")
00227 @Override
00228 public Byte parseFromString(String value) {
00229 return UINT8.parseFromString(value);
00230 }
00231
00232 @Override
00233 public String getJavaTypeName() {
00234 return UINT8.getJavaTypeName();
00235 }
00236 },
00237 INT16 {
00238 @SuppressWarnings("unchecked")
00239 @Override
00240 public Short getDefaultValue() {
00241 return Short.valueOf((short) 0);
00242 }
00243
00244 @Override
00245 public Field newVariableList(String name, int size) {
00246 return ShortArrayField.newVariable(this, name, size);
00247 }
00248
00249 @Override
00250 public int getSerializedSize() {
00251 return 2;
00252 }
00253
00254 @Override
00255 public <T> void serialize(T value, ChannelBuffer buffer) {
00256 Preconditions.checkArgument(value instanceof Short);
00257 buffer.writeShort((Short) value);
00258 }
00259
00260 @SuppressWarnings("unchecked")
00261 @Override
00262 public Short deserialize(ChannelBuffer buffer) {
00263 return buffer.readShort();
00264 }
00265
00266 @SuppressWarnings("unchecked")
00267 @Override
00268 public Short parseFromString(String value) {
00269 return Short.parseShort(value);
00270 }
00271
00272 @Override
00273 public String getJavaTypeName() {
00274 return "short";
00275 }
00276 },
00277 UINT16 {
00278 @SuppressWarnings("unchecked")
00279 @Override
00280 public Short getDefaultValue() {
00281 return INT16.getDefaultValue();
00282 }
00283
00284 @Override
00285 public Field newVariableList(String name, int size) {
00286 return ShortArrayField.newVariable(this, name, size);
00287 }
00288
00289 @Override
00290 public int getSerializedSize() {
00291 return INT16.getSerializedSize();
00292 }
00293
00294 @Override
00295 public <T> void serialize(T value, ChannelBuffer buffer) {
00296 INT16.serialize(value, buffer);
00297 }
00298
00299 @SuppressWarnings("unchecked")
00300 @Override
00301 public Short deserialize(ChannelBuffer buffer) {
00302 return INT16.deserialize(buffer);
00303 }
00304
00305 @SuppressWarnings("unchecked")
00306 @Override
00307 public Short parseFromString(String value) {
00308 return (short) Integer.parseInt(value);
00309 }
00310
00311 @Override
00312 public String getJavaTypeName() {
00313 return INT16.getJavaTypeName();
00314 }
00315 },
00316 INT32 {
00317 @SuppressWarnings("unchecked")
00318 @Override
00319 public Integer getDefaultValue() {
00320 return Integer.valueOf(0);
00321 }
00322
00323 @Override
00324 public Field newVariableList(String name, int size) {
00325 return IntegerArrayField.newVariable(this, name, size);
00326 }
00327
00328 @Override
00329 public int getSerializedSize() {
00330 return 4;
00331 }
00332
00333 @Override
00334 public <T> void serialize(T value, ChannelBuffer buffer) {
00335 Preconditions.checkArgument(value instanceof Integer);
00336 buffer.writeInt((Integer) value);
00337 }
00338
00339 @SuppressWarnings("unchecked")
00340 @Override
00341 public Integer deserialize(ChannelBuffer buffer) {
00342 return buffer.readInt();
00343 }
00344
00345 @SuppressWarnings("unchecked")
00346 @Override
00347 public Integer parseFromString(String value) {
00348 return Integer.parseInt(value);
00349 }
00350
00351 @Override
00352 public String getJavaTypeName() {
00353 return "int";
00354 }
00355 },
00356 UINT32 {
00357 @SuppressWarnings("unchecked")
00358 @Override
00359 public Integer getDefaultValue() {
00360 return INT32.getDefaultValue();
00361 }
00362
00363 @Override
00364 public Field newVariableList(String name, int size) {
00365 return IntegerArrayField.newVariable(this, name, size);
00366 }
00367
00368 @Override
00369 public int getSerializedSize() {
00370 return INT32.getSerializedSize();
00371 }
00372
00373 @Override
00374 public <T> void serialize(T value, ChannelBuffer buffer) {
00375 INT32.serialize(value, buffer);
00376 }
00377
00378 @SuppressWarnings("unchecked")
00379 @Override
00380 public Integer deserialize(ChannelBuffer buffer) {
00381 return INT32.deserialize(buffer);
00382 }
00383
00384 @SuppressWarnings("unchecked")
00385 @Override
00386 public Integer parseFromString(String value) {
00387 return (int) Long.parseLong(value);
00388 }
00389
00390 @Override
00391 public String getJavaTypeName() {
00392 return INT32.getJavaTypeName();
00393 }
00394 },
00395 INT64 {
00396 @SuppressWarnings("unchecked")
00397 @Override
00398 public Long getDefaultValue() {
00399 return Long.valueOf(0);
00400 }
00401
00402 @Override
00403 public Field newVariableList(String name, int size) {
00404 return LongArrayField.newVariable(this, name, size);
00405 }
00406
00407 @Override
00408 public int getSerializedSize() {
00409 return 8;
00410 }
00411
00412 @Override
00413 public <T> void serialize(T value, ChannelBuffer buffer) {
00414 Preconditions.checkArgument(value instanceof Long);
00415 buffer.writeLong((Long) value);
00416 }
00417
00418 @SuppressWarnings("unchecked")
00419 @Override
00420 public Long deserialize(ChannelBuffer buffer) {
00421 return buffer.readLong();
00422 }
00423
00424 @SuppressWarnings("unchecked")
00425 @Override
00426 public Long parseFromString(String value) {
00427 return Long.parseLong(value);
00428 }
00429
00430 @Override
00431 public String getJavaTypeName() {
00432 return "long";
00433 }
00434 },
00435 UINT64 {
00436 @SuppressWarnings("unchecked")
00437 @Override
00438 public Long getDefaultValue() {
00439 return INT64.getDefaultValue();
00440 }
00441
00442 @Override
00443 public Field newVariableList(String name, int size) {
00444 return INT64.newVariableList(name, size);
00445 }
00446
00447 @Override
00448 public int getSerializedSize() {
00449 return INT64.getSerializedSize();
00450 }
00451
00452 @Override
00453 public <T> void serialize(T value, ChannelBuffer buffer) {
00454 INT64.serialize(value, buffer);
00455 }
00456
00457 @SuppressWarnings("unchecked")
00458 @Override
00459 public Long deserialize(ChannelBuffer buffer) {
00460 return INT64.deserialize(buffer);
00461 }
00462
00463 @SuppressWarnings("unchecked")
00464 @Override
00465 public Long parseFromString(String value) {
00466 return INT64.parseFromString(value);
00467 }
00468
00469 @Override
00470 public String getJavaTypeName() {
00471 return INT64.getJavaTypeName();
00472 }
00473 },
00474 FLOAT32 {
00475 @SuppressWarnings("unchecked")
00476 @Override
00477 public Float getDefaultValue() {
00478 return Float.valueOf(0);
00479 }
00480
00481 @Override
00482 public Field newVariableList(String name, int size) {
00483 return FloatArrayField.newVariable(name, size);
00484 }
00485
00486 @Override
00487 public int getSerializedSize() {
00488 return 4;
00489 }
00490
00491 @Override
00492 public <T> void serialize(T value, ChannelBuffer buffer) {
00493 Preconditions.checkArgument(value instanceof Float);
00494 buffer.writeFloat((Float) value);
00495 }
00496
00497 @SuppressWarnings("unchecked")
00498 @Override
00499 public Float deserialize(ChannelBuffer buffer) {
00500 return buffer.readFloat();
00501 }
00502
00503 @SuppressWarnings("unchecked")
00504 @Override
00505 public Float parseFromString(String value) {
00506 return Float.parseFloat(value);
00507 }
00508
00509 @Override
00510 public String getJavaTypeName() {
00511 return "float";
00512 }
00513 },
00514 FLOAT64 {
00515 @SuppressWarnings("unchecked")
00516 @Override
00517 public Double getDefaultValue() {
00518 return Double.valueOf(0);
00519 }
00520
00521 @Override
00522 public int getSerializedSize() {
00523 return 8;
00524 }
00525
00526 @Override
00527 public Field newVariableList(String name, int size) {
00528 return DoubleArrayField.newVariable(name, size);
00529 }
00530
00531 @Override
00532 public <T> void serialize(T value, ChannelBuffer buffer) {
00533 Preconditions.checkArgument(value instanceof Double);
00534 buffer.writeDouble((Double) value);
00535 }
00536
00537 @SuppressWarnings("unchecked")
00538 @Override
00539 public Double deserialize(ChannelBuffer buffer) {
00540 return buffer.readDouble();
00541 }
00542
00543 @SuppressWarnings("unchecked")
00544 @Override
00545 public Double parseFromString(String value) {
00546 return Double.parseDouble(value);
00547 }
00548
00549 @Override
00550 public String getJavaTypeName() {
00551 return "double";
00552 }
00553 },
00554 STRING {
00555 @SuppressWarnings("unchecked")
00556 @Override
00557 public String getDefaultValue() {
00558 return "";
00559 }
00560
00561 @Override
00562 public Field newVariableList(String name, int size) {
00563 return ListField.newVariable(this, name);
00564 }
00565
00566 @Override
00567 public int getSerializedSize() {
00568 throw new UnsupportedOperationException();
00569 }
00570
00571 @Override
00572 public <T> void serialize(T value, ChannelBuffer buffer) {
00573 Preconditions.checkArgument(value instanceof String);
00574 byte[] bytes = ((String) value).getBytes();
00575 buffer.writeInt(bytes.length);
00576 buffer.writeBytes(bytes);
00577 }
00578
00579 @SuppressWarnings("unchecked")
00580 @Override
00581 public String deserialize(ChannelBuffer buffer) {
00582 int length = buffer.readInt();
00583 ByteBuffer stringBuffer = buffer.readSlice(length).toByteBuffer();
00584 return Charset.forName("US-ASCII").decode(stringBuffer).toString();
00585 }
00586
00587 @SuppressWarnings("unchecked")
00588 @Override
00589 public String parseFromString(String value) {
00590 return value;
00591 }
00592
00593 @Override
00594 public String getJavaTypeName() {
00595 return "java.lang.String";
00596 }
00597 },
00598 TIME {
00599 @SuppressWarnings("unchecked")
00600 @Override
00601 public Time getDefaultValue() {
00602 return new Time();
00603 }
00604
00605 @Override
00606 public Field newVariableList(String name, int size) {
00607 return ListField.newVariable(this, name);
00608 }
00609
00610 @Override
00611 public int getSerializedSize() {
00612 return 8;
00613 }
00614
00615 @Override
00616 public <T> void serialize(T value, ChannelBuffer buffer) {
00617 Preconditions.checkArgument(value instanceof Time);
00618 buffer.writeInt(((Time) value).secs);
00619 buffer.writeInt(((Time) value).nsecs);
00620 }
00621
00622 @SuppressWarnings("unchecked")
00623 @Override
00624 public Time deserialize(ChannelBuffer buffer) {
00625 return new Time(buffer.readInt(), buffer.readInt());
00626 }
00627
00628 @SuppressWarnings("unchecked")
00629 @Override
00630 public Void parseFromString(String value) {
00631 throw new UnsupportedOperationException();
00632 }
00633
00634 @Override
00635 public String getJavaTypeName() {
00636 return Time.class.getName();
00637 }
00638 },
00639 DURATION {
00640 @SuppressWarnings("unchecked")
00641 @Override
00642 public Duration getDefaultValue() {
00643 return new Duration();
00644 }
00645
00646 @Override
00647 public Field newVariableList(String name, int size) {
00648 return ListField.newVariable(this, name);
00649 }
00650
00651 @Override
00652 public int getSerializedSize() {
00653 return 8;
00654 }
00655
00656 @Override
00657 public <T> void serialize(T value, ChannelBuffer buffer) {
00658 Preconditions.checkArgument(value instanceof Duration);
00659 buffer.writeInt(((Duration) value).secs);
00660 buffer.writeInt(((Duration) value).nsecs);
00661 }
00662
00663 @SuppressWarnings("unchecked")
00664 @Override
00665 public Duration deserialize(ChannelBuffer buffer) {
00666 return new Duration(buffer.readInt(), buffer.readInt());
00667 }
00668
00669 @SuppressWarnings("unchecked")
00670 @Override
00671 public Void parseFromString(String value) {
00672 throw new UnsupportedOperationException();
00673 }
00674
00675 @Override
00676 public String getJavaTypeName() {
00677 return Duration.class.getName();
00678 }
00679 };
00680
00681 private static final ImmutableSet<String> TYPE_NAMES;
00682
00683 static {
00684 ImmutableSet.Builder<String> builder = ImmutableSet.<String>builder();
00685 for (PrimitiveFieldType type : values()) {
00686 builder.add(type.getName());
00687 }
00688 TYPE_NAMES = builder.build();
00689 }
00690
00691 public static boolean existsFor(String name) {
00692 return TYPE_NAMES.contains(name);
00693 }
00694
00695 @Override
00696 public Field newVariableValue(String name) {
00697 return ValueField.newVariable(this, name);
00698 }
00699
00700 @Override
00701 public <T> Field newConstantValue(String name, T value) {
00702 return ValueField.newConstant(this, name, value);
00703 }
00704
00705 @Override
00706 public String getName() {
00707 return toString().toLowerCase();
00708 }
00709
00710 @Override
00711 public String getMd5String() {
00712 return getName();
00713 }
00714 }