示例#1
0
    public void put(
        ThreadContext context, Storage cache, Member m, IRubyObject ptr, IRubyObject value) {
      final IRubyObject nativeValue = mappedType.toNative(context, value);
      nativeFieldIO.put(context, cache, m, ptr, nativeValue);

      if (isValueReferenceNeeded()) {
        // keep references to both the ruby and native values to preserve
        // reference chains
        cache.putReference(m, new Object[] {value, nativeValue});
      }
    }
示例#2
0
 /**
  * Checks if a reference to the ruby object assigned to this field needs to be stored
  *
  * @return <tt>true</tt> if this member type requires the ruby value to be stored.
  */
 public final boolean isValueReferenceNeeded() {
   return io.isValueReferenceNeeded();
 }
示例#3
0
 /**
  * Gets the cacheable status of this Struct member
  *
  * @return <tt>true</tt> if this member type is cacheable
  */
 public final boolean isCacheable() {
   return io.isCacheable();
 }
示例#4
0
 /**
  * Reads a ruby value from the struct member.
  *
  * @param cache The cache used to store
  * @param ptr The struct memory area.
  * @return A ruby object equivalent to the native member value.
  */
 public final IRubyObject get(ThreadContext context, Storage cache, IRubyObject ptr) {
   return io.get(context, cache, this, ptr);
 }
示例#5
0
 /**
  * Writes a ruby value to the native struct member as the appropriate native value.
  *
  * @param runtime The ruby runtime
  * @param cache The value cache
  * @param ptr The struct memory area.
  * @param value The ruby value to write to the native struct member.
  */
 public final void put(
     ThreadContext context, Storage cache, IRubyObject ptr, IRubyObject value) {
   io.put(context, cache, this, ptr, value);
 }
示例#6
0
 public final IRubyObject get(ThreadContext context, Storage cache, Member m, IRubyObject ptr) {
   return mappedType.fromNative(context, nativeFieldIO.get(context, nullStorage, m, ptr));
 }
示例#7
0
 public final boolean isValueReferenceNeeded() {
   return nativeFieldIO.isValueReferenceNeeded() || mappedType.isReferenceRequired();
 }