public Event Read()
{
if (this.eventTreeItem_1 != null)
{
throw new Exception("EventTree::Read Can not read from a tree with empty queue");
}
EventTreeItem eventTreeItem = this.eventTreeItem_0;
EventTreeItem eventTreeItem2 = null;
while (eventTreeItem.eventTreeItem_0 != null)
{
eventTreeItem2 = eventTreeItem;
eventTreeItem = eventTreeItem.eventTreeItem_0;
}
if (eventTreeItem.eventTreeItem_3 != null)
{
EventTreeItem eventTreeItem_ = eventTreeItem.eventTreeItem_4;
eventTreeItem.eventTreeItem_4.eventTreeItem_2.eventTreeItem_3 = null;
eventTreeItem.eventTreeItem_4 = eventTreeItem.eventTreeItem_4.eventTreeItem_2;
eventTreeItem = eventTreeItem_;
}
else
{
if (eventTreeItem2 != null)
{
eventTreeItem2.eventTreeItem_0 = eventTreeItem.eventTreeItem_1;
}
else
{
this.eventTreeItem_0 = eventTreeItem.eventTreeItem_1;
}
eventTreeItem.eventTreeItem_1 = null;
}
Event @event = eventTreeItem.queue.Read();
if (@event.TypeId == EventType.OnQueueClosed)
{
if (this.eventTreeItem_0 == null)
{
@event = new OnSimulatorStop();
}
}
else if (eventTreeItem.queue.IsEmpty())
{
this.eventTreeItem_1 = eventTreeItem;
}
else
{
this.method_0(eventTreeItem);
}
return @event;
}