|
@@ -1,141 +1,42 @@
|
|
|
-
|
|
|
|
|
namespace Invercargill.Operators {
|
|
namespace Invercargill.Operators {
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Builds a GValue holding a copy of the item.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Marshalling, same as hash()/equality():
|
|
|
|
|
+ * - inline types (bool, char/uchar, int/uint, long/ulong, enums)
|
|
|
|
|
+ * arrive as a pointer-sized integer carrying the value itself.
|
|
|
|
|
+ * - always-boxed types (int64, uint64, float, double and nullable
|
|
|
|
|
+ * forms) arrive as pointers to the boxed payloads and must be
|
|
|
|
|
+ * dereferenced before storing into the GValue.
|
|
|
|
|
+ *
|
|
|
|
|
+ * A null box stores the type's default value (0), documented choice:
|
|
|
|
|
+ * GValue cannot hold null for non-pointer types.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Note: typeof(T) cannot distinguish T=int from T=int? (same GType);
|
|
|
|
|
+ * inline branches serve the non-nullable forms.
|
|
|
|
|
+ */
|
|
|
public static ContainDelegate<T> contain<T>() {
|
|
public static ContainDelegate<T> contain<T>() {
|
|
|
var type = typeof(T);
|
|
var type = typeof(T);
|
|
|
- if(type == typeof(bool)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_boolean((bool)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(int8)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_schar((int8)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(uchar)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_uchar((uchar)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(int)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_int((int)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(uint)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_uint((uint)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(int64)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_int64((int64)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(uint64)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_uint64((uint64)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(long)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_long((long)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(ulong)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_ulong((ulong)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(float)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_float((float?)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(double)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_double((double?)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(string)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_string((string)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(Type)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_gtype((Type)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type.is_enum()) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_enum((int)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type.is_flags()) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_flags((uint)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(void*)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_pointer((void*)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type == typeof(ParamSpec)) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_param((ParamSpec)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else if(type.is_a(typeof(Object))) {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_object((Object)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- else {
|
|
|
|
|
- return i => {
|
|
|
|
|
- var value = Value(type);
|
|
|
|
|
- value.set_boxed((void*)i);
|
|
|
|
|
- return value;
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if(type == typeof(bool)) { return i => { var value = Value(type); value.set_boolean((bool)i); return value; }; }
|
|
|
|
|
+ else if(type == typeof(int8)) { return i => { var value = Value(type); value.set_schar((int8)i); return value; }; }
|
|
|
|
|
+ else if(type == typeof(uchar)) { return i => { var value = Value(type); value.set_uchar((uchar)i); return value; }; }
|
|
|
|
|
+ else if(type == typeof(int)) { return i => { var value = Value(type); value.set_int((int)i); return value; }; }
|
|
|
|
|
+ else if(type == typeof(uint)) { return i => { var value = Value(type); value.set_uint((uint)i); return value; }; }
|
|
|
|
|
+ else if(type == typeof(int64)) { return i => { var value = Value(type); value.set_int64(((int64?)i) == null ? (int64)0 : (int64)((int64?)i)); return value; }; }
|
|
|
|
|
+ else if(type == typeof(uint64)) { return i => { var value = Value(type); value.set_uint64(((uint64?)i) == null ? (uint64)0 : (uint64)((uint64?)i)); return value; }; }
|
|
|
|
|
+ else if(type == typeof(long)) { return i => { var value = Value(type); value.set_long((long)i); return value; }; }
|
|
|
|
|
+ else if(type == typeof(ulong)) { return i => { var value = Value(type); value.set_ulong((ulong)i); return value; }; }
|
|
|
|
|
+ else if(type == typeof(float)) { return i => { var value = Value(type); value.set_float(((float?)i) == null ? (float)0 : (float)((float?)i)); return value; }; }
|
|
|
|
|
+ else if(type == typeof(double)) { return i => { var value = Value(type); value.set_double(((double?)i) == null ? (double)0 : (double)((double?)i)); return value; }; }
|
|
|
|
|
+ else if(type == typeof(string)) { return i => { var value = Value(type); value.set_string((string)i); return value; }; }
|
|
|
|
|
+ else if(type == typeof(Type)) { return i => { var value = Value(type); value.set_gtype((Type)i); return value; }; }
|
|
|
|
|
+ else if(type.is_enum()) { return i => { var value = Value(type); value.set_enum((int)i); return value; }; }
|
|
|
|
|
+ else if(type.is_flags()) { return i => { var value = Value(type); value.set_flags((uint)i); return value; }; }
|
|
|
|
|
+ else if(type == typeof(void*)) { return i => { var value = Value(type); value.set_pointer((void*)i); return value; }; }
|
|
|
|
|
+ else if(type == typeof(ParamSpec)) { return i => { var value = Value(type); value.set_param((ParamSpec)i); return value; }; }
|
|
|
|
|
+ else if(type.is_a(typeof(Object))) { return i => { var value = Value(type); value.set_object((Object)i); return value; }; }
|
|
|
|
|
+ else { return i => { var value = Value(type); value.set_boxed((void*)i); return value; }; }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|