示例#1
0
    public IRubyObject get(
        ThreadContext context, StructLayout.Storage cache, Member m, IRubyObject ptr) {
      IRubyObject s = cache.getCachedValue(m);
      if (s == null) {
        s =
            isCharArray()
                ? new StructLayout.CharArrayProxy(
                    context.getRuntime(), ptr, m.offset, arrayType, op)
                : new StructLayout.ArrayProxy(context.getRuntime(), ptr, m.offset, arrayType, op);
        cache.putCachedValue(m, s);
      }

      return s;
    }
示例#2
0
    public IRubyObject get(
        ThreadContext context, StructLayout.Storage cache, Member m, IRubyObject ptr) {
      DirectMemoryIO 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.getRuntime(), memory);
      cache.putCachedValue(m, retval);

      return retval;
    }
示例#3
0
    public IRubyObject get(
        ThreadContext context, StructLayout.Storage cache, Member m, IRubyObject ptr) {
      IRubyObject s = cache.getCachedValue(m);
      if (s == null) {
        s =
            sbv.getStructClass()
                .newInstance(
                    context,
                    new IRubyObject[] {
                      ((AbstractMemory) ptr).slice(context.getRuntime(), m.getOffset(ptr))
                    },
                    Block.NULL_BLOCK);
        cache.putCachedValue(m, s);
      }

      return s;
    }
示例#4
0
    public IRubyObject get(
        ThreadContext context, StructLayout.Storage cache, Member m, IRubyObject 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.getRuntime(),
                  ((Pointer) ptr).getPointer(context.getRuntime(), m.getOffset(ptr)),
                  (CallbackInfo) m.type);
      cache.putCachedValue(m, fptr);

      return fptr;
    }