/** * */ package com.browseengine.bobo.util; import java.util.ArrayList; public class BigIntBuffer { private static final int PAGESIZE = 1024; private static final int MASK = 0x3FF; private static final int SHIFT = 10; private final ArrayList<int[]> _buffer; private int _allocSize; private int _mark; public BigIntBuffer() { _buffer = new ArrayList<int[]>(); _allocSize = 0; _mark = 0; } public int alloc(int size) { if (size > PAGESIZE) throw new IllegalArgumentException("size too big"); if ((_mark + size) > _allocSize) { int[] page = new int[PAGESIZE]; _buffer.add(page); _allocSize += PAGESIZE; } int ptr = _mark; _mark += size; return ptr; } public void reset() { _mark = 0; } public void set(int ptr, int val) { int[] page = _buffer.get(ptr >> SHIFT); page[ptr & MASK] = val; } public int get(int ptr) { int[] page = _buffer.get(ptr >> SHIFT); return page[ptr & MASK]; } }