fieldList.add(f); Member m = new Member(f, index, f.isCacheable() ? cfCount++ : -1, f.isValueReferenceNeeded() ? refCount++ : -1); for (int idx = symbolIndex(f.name, memberSymbolLookupTable.length); ; idx = nextIndex(idx, memberSymbolLookupTable.length)) { if (memberSymbolLookupTable[idx] == null) {
public IRubyObject get(ThreadContext context, StructLayout.Storage cache, Member m, AbstractMemory ptr) { MemoryIO memory = ((AbstractMemory) ptr).getMemoryIO().getMemoryIO(m.getOffset(ptr)); IRubyObject old = cache.getCachedValue(m); if (old instanceof Pointer) { MemoryIO oldMemory = ((Pointer) old).getMemoryIO(); if (memory.equals(oldMemory)) { return old; } } Pointer retval = new Pointer(context.runtime, memory); cache.putCachedValue(m, retval); return retval; }
public void put(ThreadContext context, StructLayout.Storage cache, Member m, AbstractMemory ptr, IRubyObject value) { if (!(value instanceof Struct)) { throw context.runtime.newTypeError(value, context.runtime.getFFI().structClass); } Struct s = (Struct) value; if (!s.getLayout(context).equals(sbv.getStructLayout())) { throw context.runtime.newTypeError("incompatible struct layout"); } ByteBuffer src = s.getMemoryIO().asByteBuffer(); if (src.remaining() != sbv.size) { throw context.runtime.newRuntimeError("bad size in " + value.getMetaClass().toString()); } ptr.getMemoryIO().slice(m.offset(), sbv.size).asByteBuffer().put(src); }
fieldList.add(f); Member m = new Member(f, index, f.isCacheable() ? cfCount++ : -1, f.isValueReferenceNeeded() ? refCount++ : -1); for (int idx = symbolIndex(f.name, memberSymbolLookupTable.length); ; idx = nextIndex(idx, memberSymbolLookupTable.length)) { if (memberSymbolLookupTable[idx] == null) {
fieldList.add(f); Member m = new Member(f, index, f.isCacheable() ? cfCount++ : -1, f.isValueReferenceNeeded() ? refCount++ : -1); for (int idx = symbolIndex(f.name, memberSymbolLookupTable.length); ; idx = nextIndex(idx, memberSymbolLookupTable.length)) { if (memberSymbolLookupTable[idx] == null) {
fieldType = FFIUtil.getFFIType(m.type()); if (fieldType == null) { throw layout.getRuntime().newTypeError("unsupported Struct field type " + m);
fieldType = FFIUtil.getFFIType(m.type()); if (fieldType == null) { throw layout.getRuntime().newTypeError("unsupported Struct field type " + m);
fieldType = FFIUtil.getFFIType(m.type()); if (fieldType == null) { throw layout.getRuntime().newTypeError("unsupported Struct field type " + m);
fieldList.add(f); Member m = new Member(f, index, f.isCacheable() ? cfCount++ : -1, f.isValueReferenceNeeded() ? refCount++ : -1); for (int idx = symbolIndex(f.name, memberSymbolLookupTable.length); ; idx = nextIndex(idx, memberSymbolLookupTable.length)) { if (memberSymbolLookupTable[idx] == null) {
fieldType = FFIUtil.getFFIType(m.type()); if (fieldType == null) { throw layout.getRuntime().newTypeError("unsupported Struct field type " + m);
public void put(ThreadContext context, StructLayout.Storage cache, Member m, AbstractMemory ptr, IRubyObject value) { if (!(value instanceof Struct)) { throw context.runtime.newTypeError(value, context.runtime.getFFI().structClass); } Struct s = (Struct) value; if (!s.getLayout(context).equals(sbv.getStructLayout())) { throw context.runtime.newTypeError("incompatible struct layout"); } ByteBuffer src = s.getMemoryIO().asByteBuffer(); if (src.remaining() != sbv.size) { throw context.runtime.newRuntimeError("bad size in " + value.getMetaClass().toString()); } ptr.getMemoryIO().slice(m.offset(), sbv.size).asByteBuffer().put(src); }
@JRubyMethod(name = "[]") public IRubyObject getFieldValue(ThreadContext context, IRubyObject fieldName) { return layout.getMember(context.runtime, fieldName).get(context, this, getMemory()); }
@JRubyMethod(name = "[]") public IRubyObject getFieldValue(ThreadContext context, IRubyObject fieldName) { return layout.getMember(context.runtime, fieldName).get(context, this, getMemory()); }
public void put(ThreadContext context, StructLayout.Storage cache, Member m, AbstractMemory ptr, IRubyObject value) { if (!(value instanceof Struct)) { throw context.runtime.newTypeError(value, context.runtime.getFFI().structClass); } Struct s = (Struct) value; if (!s.getLayout(context).equals(sbv.getStructLayout())) { throw context.runtime.newTypeError("incompatible struct layout"); } ByteBuffer src = s.getMemoryIO().asByteBuffer(); if (src.remaining() != sbv.size) { throw context.runtime.newRuntimeError("bad size in " + value.getMetaClass().toString()); } ptr.getMemoryIO().slice(m.offset(), sbv.size).asByteBuffer().put(src); }
public IRubyObject get(ThreadContext context, StructLayout.Storage cache, Member m, AbstractMemory ptr) { MemoryIO memory = ((AbstractMemory) ptr).getMemoryIO().getMemoryIO(m.getOffset(ptr)); IRubyObject old = cache.getCachedValue(m); if (old instanceof Pointer) { MemoryIO oldMemory = ((Pointer) old).getMemoryIO(); if (memory.equals(oldMemory)) { return old; } } Pointer retval = new Pointer(context.runtime, memory); cache.putCachedValue(m, retval); return retval; }
public IRubyObject get(ThreadContext context, StructLayout.Storage cache, Member m, AbstractMemory ptr) { IRubyObject s = cache.getCachedValue(m); if (s == null) { s = sbv.getStructClass().newInstance(context, ptr.slice(context.runtime, m.getOffset(ptr)), Block.NULL_BLOCK); cache.putCachedValue(m, s); } return s; }
public IRubyObject get(ThreadContext context, StructLayout.Storage cache, Member m, AbstractMemory ptr) { final long address = ((Pointer) ptr).getMemoryIO().getAddress(m.getOffset(ptr)); AbstractInvoker fptr = (AbstractInvoker) cache.getCachedValue(m); if (fptr != null && fptr.getAddress() == address) { return fptr; } fptr = Factory.getInstance().newFunction(context.runtime, ((Pointer) ptr).getPointer(context.runtime, m.getOffset(ptr)), (CallbackInfo) m.type); cache.putCachedValue(m, fptr); return fptr; }
public IRubyObject get(ThreadContext context, StructLayout.Storage cache, Member m, AbstractMemory ptr) { IRubyObject s = cache.getCachedValue(m); if (s == null) { s = sbv.getStructClass().newInstance(context, ptr.slice(context.runtime, m.getOffset(ptr)), Block.NULL_BLOCK); cache.putCachedValue(m, s); } return s; }
@JRubyMethod(name = "values") public IRubyObject values(ThreadContext context) { IRubyObject[] values = new IRubyObject[layout.getFieldCount()]; int i = 0; for (StructLayout.Member m : layout.getMembers()) { values[i++] = m.get(context, this, getMemory()); } return RubyArray.newArrayNoCopy(context.runtime, values); }
public void put(ThreadContext context, StructLayout.Storage cache, Member m, AbstractMemory ptr, IRubyObject value) { if (!(value instanceof Struct)) { throw context.runtime.newTypeError(value, context.runtime.getFFI().structClass); } Struct s = (Struct) value; if (!s.getLayout(context).equals(sbv.getStructLayout())) { throw context.runtime.newTypeError("incompatible struct layout"); } ByteBuffer src = s.getMemoryIO().asByteBuffer(); if (src.remaining() != sbv.size) { throw context.runtime.newRuntimeError("bad size in " + value.getMetaClass().toString()); } ptr.getMemoryIO().slice(m.offset(), sbv.size).asByteBuffer().put(src); }