(long offset, Object value, Class<?> type)
| 845 | ////////////////////////////////////////////////////////////////////////// |
| 846 | |
| 847 | void setValue(long offset, Object value, Class<?> type) { |
| 848 | |
| 849 | // Set the value at the offset according to its type |
| 850 | if (type == boolean.class || type == Boolean.class) { |
| 851 | setInt(offset, Boolean.TRUE.equals(value) ? -1 : 0); |
| 852 | } else if (type == byte.class || type == Byte.class) { |
| 853 | setByte(offset, value == null ? 0 : ((Byte)value).byteValue()); |
| 854 | } else if (type == short.class || type == Short.class) { |
| 855 | setShort(offset, value == null ? 0 : ((Short)value).shortValue()); |
| 856 | } else if (type == char.class || type == Character.class) { |
| 857 | setChar(offset, value == null ? 0 : ((Character)value).charValue()); |
| 858 | } else if (type == int.class || type == Integer.class) { |
| 859 | setInt(offset, value == null ? 0 : ((Integer)value).intValue()); |
| 860 | } else if (type == long.class || type == Long.class) { |
| 861 | setLong(offset, value == null ? 0 : ((Long)value).longValue()); |
| 862 | } else if (type == float.class || type == Float.class) { |
| 863 | setFloat(offset, value == null ? 0f : ((Float)value).floatValue()); |
| 864 | } else if (type == double.class || type == Double.class) { |
| 865 | setDouble(offset, value == null ? 0.0 : ((Double)value).doubleValue()); |
| 866 | } else if (type == Pointer.class) { |
| 867 | setPointer(offset, (Pointer)value); |
| 868 | } else if (type == String.class) { |
| 869 | setPointer(offset, (Pointer)value); |
| 870 | } else if (type == WString.class) { |
| 871 | setPointer(offset, (Pointer)value); |
| 872 | } else if (Structure.class.isAssignableFrom(type)) { |
| 873 | Structure s = (Structure)value; |
| 874 | if (Structure.ByReference.class.isAssignableFrom(type)) { |
| 875 | setPointer(offset, s == null ? null : s.getPointer()); |
| 876 | if (s != null) { |
| 877 | s.autoWrite(); |
| 878 | } |
| 879 | } |
| 880 | else { |
| 881 | s.useMemory(this, (int)offset, true); |
| 882 | s.write(); |
| 883 | } |
| 884 | } else if (Callback.class.isAssignableFrom(type)) { |
| 885 | setPointer(offset, CallbackReference.getFunctionPointer((Callback)value)); |
| 886 | } else if (Platform.HAS_BUFFERS && Buffer.class.isAssignableFrom(type)) { |
| 887 | Pointer p = value == null ? null |
| 888 | : Native.getDirectBufferPointer((Buffer)value); |
| 889 | setPointer(offset, p); |
| 890 | } else if (NativeMapped.class.isAssignableFrom(type)) { |
| 891 | NativeMappedConverter tc = NativeMappedConverter.getInstance(type); |
| 892 | Class<?> nativeType = tc.nativeType(); |
| 893 | setValue(offset, tc.toNative(value, new ToNativeContext()), nativeType); |
| 894 | } else if (type.isArray()) { |
| 895 | writeArray(offset, value, type.getComponentType()); |
| 896 | } else { |
| 897 | throw new IllegalArgumentException("Writing " + type + " to memory is not supported"); |
| 898 | } |
| 899 | } |
| 900 | |
| 901 | /** Write memory starting at offset from the array with element type cls. */ |
| 902 | private void writeArray(long offset, Object value, Class<?> cls) { |
no test coverage detected