Exemplo n.º 1
0
 void ITargetedBind.MakeTargetedId()
 {
     if (targeted_id == 0)
     {
         targeted_id = (long)Underlying.AsPointer(ref Underlying.AsRef(this));
     }
 }
Exemplo n.º 2
0
        public void OffsetOfTest()
        {
            var obj = new Tester();

            var int64_offset  = TypeHelper.OffsetOf(typeof(Tester).GetField(nameof(Tester.public_int64)));
            var string_offset = TypeHelper.OffsetOf(typeof(Tester).GetField(nameof(Tester.public_string)));

            var static_int_offset    = TypeHelper.OffsetOf(typeof(Tester).GetField(nameof(Tester.static_int)));
            var static_string_offset = TypeHelper.OffsetOf(typeof(Tester).GetField(nameof(Tester.static_string)));
            var static_object_offset = TypeHelper.OffsetOf(typeof(Tester).GetField(nameof(Tester.static_object)));

            var struct_int64_offset  = TypeHelper.OffsetOf(typeof(Tester_Struct).GetField(nameof(Tester_Struct.public_int64)));
            var struct_string_offset = TypeHelper.OffsetOf(typeof(Tester_Struct).GetField(nameof(Tester_Struct.public_string)));

            var struct_static_bool_offset = TypeHelper.OffsetOf(typeof(Tester_Struct).GetField(nameof(Tester_Struct.static_bool)));
            var struct_static_byte_offset = TypeHelper.OffsetOf(typeof(Tester_Struct).GetField(nameof(Tester_Struct.static_byte)));

            var gc_statics_base_pointer            = (void *)TypeHelper.GetGCStaticsBasePointer(typeof(Tester));
            var non_gc_statics_base_pointer        = (void *)TypeHelper.GetNonGCStaticsBasePointer(typeof(Tester));
            var struct_non_gc_statics_base_pointer = (void *)TypeHelper.GetNonGCStaticsBasePointer(typeof(Tester_Struct));

            Underlying.AddByteOffset(ref TypeHelper.Unbox <long>(obj), int64_offset)    = 999;
            Underlying.AddByteOffset(ref TypeHelper.Unbox <string>(obj), string_offset) = "F**k";

            AreEqual(obj.public_int64, 999);
            AreEqual(obj.public_string, "F**k");

            Underlying.AddByteOffset(ref Underlying.AsRef <int>(non_gc_statics_base_pointer), static_int_offset)   = 123;
            Underlying.AddByteOffset(ref Underlying.AsRef <string>(gc_statics_base_pointer), static_string_offset) = "Dogwei";
            Underlying.AddByteOffset(ref Underlying.AsRef <object>(gc_statics_base_pointer), static_object_offset) = obj;

            AreEqual(Tester.static_int, 123);
            AreEqual(Tester.static_string, "Dogwei");
            AreEqual(Tester.static_object, obj);


            var value = new Tester_Struct();


            Underlying.AddByteOffset(ref Underlying.As <Tester_Struct, long>(ref value), struct_int64_offset)    = 999;
            Underlying.AddByteOffset(ref Underlying.As <Tester_Struct, string>(ref value), struct_string_offset) = "F**k";

            AreEqual(value.public_int64, 999);
            AreEqual(value.public_string, "F**k");

            Underlying.AddByteOffset(ref Underlying.AsRef <bool>(struct_non_gc_statics_base_pointer), struct_static_bool_offset) = true;
            Underlying.AddByteOffset(ref Underlying.AsRef <byte>(struct_non_gc_statics_base_pointer), struct_static_byte_offset) = 128;

            AreEqual(Tester_Struct.static_bool, true);
            AreEqual(Tester_Struct.static_byte, 128);
        }
Exemplo n.º 3
0
        public static T SlowReadParse <T>(string str)
        {
            if (typeof(T) == typeof(DateTime))
            {
                return(Underlying.As <DateTime, T>(ref Underlying.AsRef(DateTime.Parse(str))));
            }
            else if (typeof(T) == typeof(DateTimeOffset))
            {
                return(Underlying.As <DateTimeOffset, T>(ref Underlying.AsRef(DateTimeOffset.Parse(str))));
            }
            else if (typeof(T) == typeof(Guid))
            {
                return(Underlying.As <Guid, T>(ref Underlying.AsRef(new Guid(str))));
            }
            else if (typeof(T) == typeof(long))
            {
                return(Underlying.As <long, T>(ref Underlying.AsRef(long.Parse(str, NumberStyle))));
            }
            else if (typeof(T) == typeof(ulong))
            {
                return(Underlying.As <ulong, T>(ref Underlying.AsRef(ulong.Parse(str, NumberStyle))));
            }
            else if (typeof(T) == typeof(double))
            {
                return(Underlying.As <double, T>(ref Underlying.AsRef(double.Parse(str, NumberStyle))));
            }
            else if (typeof(T) == typeof(decimal))
            {
                return(Underlying.As <decimal, T>(ref Underlying.AsRef(decimal.Parse(str, NumberStyle))));
            }
            else if (typeof(T) == typeof(RWPathInfo))
            {
                fixed(char *chars = str)
                {
                    return((T)(object)ParseReference(chars, str.Length));
                }
            }

            return(default);
Exemplo n.º 4
0
 /// <summary>
 /// 将字节码转换为 16 进制字符串。
 /// </summary>
 /// <param name="bytes">字节码</param>
 /// <returns>返回一个字符串</returns>
 public static string ToHexString(this ReadOnlySpan <byte> bytes)
 {
     return(ToHexString(ref Underlying.AsRef(bytes[0]), bytes.Length));
 }
Exemplo n.º 5
0
 public static unsafe void StoreStaticFieldValue <TValue>(TValue value, IntPtr address)
 {
     Underlying.AsRef <TValue>((void *)address) = value;
 }
Exemplo n.º 6
0
 public static unsafe TValue LoadStaticFieldValue <TValue>(IntPtr address)
 {
     return(Underlying.AsRef <TValue>((void *)address));
 }