| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 
							- package com.oblivm.backend.network;
 
- public class CustomizedConcurrentQueue {
 
- 	int capacity;
 
- 	int size = 0;
 
- 	byte[] data;
 
- 	boolean finished = false;
 
- 	public CustomizedConcurrentQueue(int capacity) {
 
- 		this.capacity = capacity;
 
- 		data = new byte[capacity];
 
- 	}
 
- 	public void destory() {
 
- 		finished = true;
 
- 	}
 
- 	public void insert(byte[] in) {
 
- 		while (in.length + atomic(null, 3) > capacity) {
 
- 		}
 
- 		atomic(in, 1);
 
- 	}
 
- 	public synchronized int atomic(byte[] in, int op) {
 
- 		if (op == 1) {
 
- 			System.arraycopy(in, 0, data, size, in.length);
 
- 			size += in.length;
 
- 			return 0;
 
- 		} else if (op == 3) {
 
- 			return size;
 
- 		} else {
 
- 			System.arraycopy(data, 0, in, 0, size);
 
- 			int oldsize = size;
 
- 			size = 0;
 
- 			return oldsize;
 
- 		}
 
- 	}
 
- 	public int pop(byte[] d) {
 
- 		int res = atomic(d, 2);
 
- 		if (res == 0 && finished) {
 
- 			// System.out.println("!");
 
- 			return -1;
 
- 		} else
 
- 			return res;
 
- 	}
 
- }
 
 
  |