package com.netthreads.osc.common.domain;
import java.util.ArrayList;
import java.util.List;
import com.netthreads.osc.common.collections.Pool;
import com.netthreads.osc.common.collections.ResettingPool;
/**
* An OSC Bundle consists of the OSC-string "#bundle" followed by an OSC Time
* Tag, followed by zero or more OSC Bundle Elements. The OSC-timetag is a
* 64-bit fixed point time tag.
*
*/
public class OSCBundle implements OSCPacket
{
public static final int POOL_INITIAL_CAPACITY = 32;
private long timeTag;
private List<OSCPacket> messages;
// Message Pool.
private static final Pool<OSCBundle> pool = new ResettingPool<OSCBundle>(POOL_INITIAL_CAPACITY)
{
@Override
protected OSCBundle newObject()
{
return new OSCBundle();
}
};
/**
* Get instance.
*
* @return instance;
*/
public static OSCBundle $()
{
OSCBundle bundle = pool.obtain();
return bundle;
}
/**
* Construct bundle.
*
*/
private OSCBundle()
{
timeTag = 0;
messages = new ArrayList<OSCPacket>();
}
/**
* Time tag as milliseconds in normal java time.
*
* @return milliseconds in normal java time.
*/
public long getTimeTag()
{
return timeTag;
}
/**
* Set time tag as milliseconds in normal java time.
*
* @param timeTag
*/
public void setTimeTag(long timeTag)
{
this.timeTag = timeTag;
}
/**
* Add message to bundle.
*
* @param message
*/
public void addMessage(OSCMessage message)
{
messages.add(message);
}
/**
* Return list of associated messages.
*
* @return
*/
public List<OSCPacket> getMessages()
{
return messages;
}
/**
* Reset attributes.
*
*/
@Override
public void reset()
{
timeTag = 0;
for (OSCPacket message : messages)
{
message.reset();
}
messages.clear();
}
@Override
public void free()
{
for (OSCPacket message : messages)
{
message.free();
}
pool.free(this);
}
/**
* For debug only.
*/
@Override
public String toString()
{
String message = timeTag+": ";
int size = messages.size();
for (int i = 0; i < size; i++)
{
message += messages.get(i) + ",";
}
return message;
}
/**
* For test only.
*
* @return The pool.
*/
public static Pool<OSCBundle> getPool()
{
return pool;
}
}