Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 package org.ros.internal.transport.queue;
00018
00019 import com.google.common.annotations.VisibleForTesting;
00020
00021 import org.jboss.netty.buffer.ChannelBuffer;
00022 import org.ros.message.MessageDeserializer;
00023
00035 public class LazyMessage<T> {
00036
00037 private final ChannelBuffer buffer;
00038 private final MessageDeserializer<T> deserializer;
00039 private final Object mutex;
00040
00041 private T message;
00042
00049 public LazyMessage(ChannelBuffer buffer, MessageDeserializer<T> deserializer) {
00050 this.buffer = buffer;
00051 this.deserializer = deserializer;
00052 mutex = new Object();
00053 }
00054
00055 @VisibleForTesting
00056 LazyMessage(T message) {
00057 this(null, null);
00058 this.message = message;
00059 }
00060
00064 public T get() {
00065 synchronized (mutex) {
00066 if (message != null) {
00067 return message;
00068 }
00069 message = deserializer.deserialize(buffer);
00070 }
00071 return message;
00072 }
00073 }