@Override public Void apply(final MMapBuffer b) { //noinspection deprecation madviseDontNeed(b.memory.getAddress(), b.memory.length()); return null; } });
static void mincore(long addr, long length, DirectMemory memory) { int err = mincore(addr, length, memory.getAddress()); if (err != 0) { switch (err) { case ENOMEM: throw new IllegalArgumentException("illegal arguments: address: "+addr+" length: "+length+" vec: "+memory.getAddress()); case EAGAIN: mincore(addr, length, memory); return; case EFAULT: throw new IllegalArgumentException("memory at "+memory.getAddress()+" is not valid"); case EINVAL: throw new IllegalArgumentException("address "+addr+" is not a multiple of the page size"); default: throw new IllegalArgumentException("unknown error"); } } }
public static void calculateGroups(final int min, final int max, final long magicNumber, final int numBuckets, final int n, int[] valBuf, int[] docGroupBuffer, DirectMemory nativeValBuf, DirectMemory nativeDocGroupBuffer) { final long valBufAddress = nativeValBuf.getAddress(); UNSAFE.copyMemory(valBuf, INT_ARRAY_BASE_OFFSET, null, valBufAddress, 4*n); final long docGroupBufferAddress = nativeDocGroupBuffer.getAddress(); calculateGroups(min, max, magicNumber, numBuckets, n, valBufAddress, docGroupBufferAddress); UNSAFE.copyMemory(null, docGroupBufferAddress, docGroupBuffer, INT_ARRAY_BASE_OFFSET, 4*n); }
public static Stat fstat(FileDescriptor fd) throws IOException { NativeBuffer nativeBuffer = new NativeBuffer(92, ByteOrder.nativeOrder()); try { DirectMemory direct = nativeBuffer.memory(); try { int err = fstat(fdField.getInt(fd), direct.getAddress()); if (err == errstr.indexOf("ENOENT")) { throw new FileNotFoundException("No such file or directory"); } if (err != 0) { throw new IOException("fstat on file descriptor "+fd+" failed with error "+(err < 0 ? "unknown" : errstr.get(err))); } } catch (IllegalAccessException e) { throw Throwables.propagate(e); } return new Stat(direct); } finally { nativeBuffer.close(); } }
public static Stat lstat(String file) throws IOException { NativeBuffer nativeBuffer = new NativeBuffer(92, ByteOrder.nativeOrder()); try { DirectMemory direct = nativeBuffer.memory(); int err = lstat(file, direct.getAddress()); if (err == errstr.indexOf("ENOENT")) { throw new FileNotFoundException("No such file or directory: "+file); } if (err != 0) { throw new IOException("stat on path "+file+" failed with error "+(err < 0 ? "unknown" : errstr.get(err))); } return new Stat(direct); } finally { nativeBuffer.close(); } }
public static Stat stat(String file) throws IOException { NativeBuffer nativeBuffer = new NativeBuffer(92, ByteOrder.nativeOrder()); try { DirectMemory direct = nativeBuffer.memory(); int err = stat(file, direct.getAddress()); if (err != 0) { if (err == errstr.indexOf("ENOENT")) { throw new FileNotFoundException("No such file or directory: "+file); } throw new IOException("stat on path "+file+" failed with error "+(err < 0 ? "unknown" : errstr.get(err))); } return new Stat(direct); } finally { nativeBuffer.close(); } }
private void internalReset(SimpleTermIterator term) throws IOException { final String filename = term.getFilename(); if (!filename.equals(currentFileOpen)) { if (file != null) file.close(); file = mapCache.copyOrOpen(filename); memory = file.get().memory(); currentFileOpen = filename; } buffer.reset(memory.getAddress()+term.getOffset(), term.docFreq()); lastDoc = 0; }
@Override public final boolean nextTerm() { if (currentTermDocsRemaining > 0) throw new IllegalStateException("must iterate over entire doc list for previous term before calling nextTerm"); final int nextTermIndex = termIndex+1; if (nextTermIndex < bufferedTerms) { termIndex = nextTermIndex; currentTermDocsRemaining = docFreqBuffer[termIndex]; poll(); lastDoc = 0; return true; } if (bufferedTerms > 0) { poll(); } long totalDocFreq = 0; termIndex = 0; bufferedTerms = 0; if (!bufferNext()) return false; final long offset = offset(); do { docFreqBuffer[bufferedTerms] = lastDocFreq(); totalDocFreq += lastDocFreq(); bufferedTerms++; } while (bufferedTerms < docFreqBuffer.length && bufferNext()); currentTermDocsRemaining = docFreqBuffer[termIndex]; lastDoc = 0; buffer.reset(memory.getAddress()+offset, totalDocFreq); return true; }