001/* 002 * This file is part of the Jikes RVM project (http://jikesrvm.org). 003 * 004 * This file is licensed to You under the Eclipse Public License (EPL); 005 * You may not use this file except in compliance with the License. You 006 * may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/eclipse-1.0.php 009 * 010 * See the COPYRIGHT.txt file distributed with this work for information 011 * regarding copyright ownership. 012 */ 013package org.jikesrvm.tuningfork; 014 015import com.ibm.tuningfork.tracegen.chunk.RawChunk; 016 017/** 018 * A Queue of chunks intended to keep track of meta-chunks. 019 * Therefore it can be implemented using Java-level synchronization and 020 * allocation operations to wrap the Chunks in Queue nodes. 021 */ 022public class ChunkQueue { 023 024 private Node head = null; 025 private Node tail = null; 026 027 public synchronized void enqueue(RawChunk c) { 028 Node newNode = new Node(c); 029 if (tail == null) { 030 head = newNode; 031 tail = newNode; 032 } else { 033 tail.next = newNode; 034 tail = newNode; 035 } 036 } 037 038 public synchronized RawChunk dequeue() { 039 if (head != null) { 040 RawChunk result = head.chunk; 041 head = head.next; 042 if (head == null) { 043 tail = null; 044 } 045 return result; 046 } else { 047 return null; 048 } 049 } 050 051 public boolean isEmpty() { 052 return head == null; 053 } 054 055 private static final class Node { 056 final RawChunk chunk; 057 Node next; 058 Node(RawChunk c) { 059 this.chunk = c; 060 } 061 }; 062}