public NativeMappedConverter(Class<?> type) { if (!NativeMapped.class.isAssignableFrom(type)) throw new IllegalArgumentException("Type must derive from " + NativeMapped.class); this.type = type; this.instance = defaultValue(); this.nativeType = instance.nativeType(); }
@Override public Object toNative(Object value, ToNativeContext context) { if (value == null) { if (Pointer.class.isAssignableFrom(nativeType)) { return null; } value = defaultValue(); } return ((NativeMapped)value).toNative(); } }
private Object initializeField(Field field, Class<?> type) { Object value = null; if (Structure.class.isAssignableFrom(type) && !(ByReference.class.isAssignableFrom(type))) { try { value = newInstance((Class<? extends Structure>) type, PLACEHOLDER_MEMORY); setFieldValue(field, value); } catch(IllegalArgumentException e) { String msg = "Can't determine size of nested structure"; throw new IllegalArgumentException(msg, e); } } else if (NativeMapped.class.isAssignableFrom(type)) { NativeMappedConverter tc = NativeMappedConverter.getInstance(type); value = tc.defaultValue(); setFieldValue(field, value); } return value; }
@Override public Object toNative(Object value, ToNativeContext context) { if (value == null) { if (Pointer.class.isAssignableFrom(nativeType)) { return null; } value = defaultValue(); } return ((NativeMapped)value).toNative(); } }
public NativeMappedConverter(Class<?> type) { if (!NativeMapped.class.isAssignableFrom(type)) throw new IllegalArgumentException("Type must derive from " + NativeMapped.class); this.type = type; this.instance = defaultValue(); this.nativeType = instance.nativeType(); }
private Object initializeField(Field field, Class<?> type) { Object value = null; if (Structure.class.isAssignableFrom(type) && !(ByReference.class.isAssignableFrom(type))) { try { value = newInstance(type, PLACEHOLDER_MEMORY); setFieldValue(field, value); } catch(IllegalArgumentException e) { String msg = "Can't determine size of nested structure"; throw new IllegalArgumentException(msg, e); } } else if (NativeMapped.class.isAssignableFrom(type)) { NativeMappedConverter tc = NativeMappedConverter.getInstance(type); value = tc.defaultValue(); setFieldValue(field, value); } return value; }
if (NativeMapped.class.isAssignableFrom(type)) { NativeMappedConverter tc = new NativeMappedConverter(type); value = tc.defaultValue(); nativeType = tc.nativeType(); structField.writeConverter = tc;