Пример #1
0
 /// <summary>
 /// 移除flag中指定的vt特性
 /// </summary>
 public static void RemoveFlag(ref int flag, ValueType vt)
 {
     if (CheckFlag(flag, vt))
     {
         flag &= ~(1 << (int)vt);
     }
 }
Пример #2
0
 public Option(string name, ValueType valueType, string description, string example) : this(name, valueType)
 {
     Name = name;
     ValueType = valueType;
     Description = description;
     Example = example;
 }
Пример #3
0
        static void ChangeProperties(ValueType instance)
        {
            instance.Number = 29;
            instance.String = "twentynine";

            Console.WriteLine("value in method: {0} {1}", instance.Number, instance.String);
        }
Пример #4
0
 /// <summary>
 /// 
 /// </summary>
 /// <remarks></remarks>
 /// <seealso cref=""/>
 /// <param name="name"></param>
 /// <param name="dataType"></param>
 /// <param name="pattern"></param>
 public PatternValidation(string name, string dataType, string pattern)
 {
     this.appliedTo = ValueType.All;
     this.name = name;
     this.dataType = dataType;
     this.pattern = pattern;
 }
Пример #5
0
 /// <summary>
 /// 
 /// </summary>
 /// <remarks></remarks>
 /// <seealso cref=""/>
 /// <param name="name"></param>
 /// <param name="dataType"></param>
 /// <param name="checkList"></param>
 public DomainValidation(string name, string dataType, List<string> checkList)
 {
     this.appliedTo = ValueType.All;
     this.name = name;
     this.dataType = dataType;
     this.checkList = checkList;
 }
Пример #6
0
        public static int Test2()
        {
            ValueType vt = new ValueType(2);

            int i = vt.GetValue();

            return i;
        }
 internal static void AddIndexRuleConstraints(ConstraintBuilder constraintBuilder, ValueType stringType)
 {
     constraintBuilder
         .AssertAll<ValueField>(vf => (!vf.HasIndexAttribute && !vf.HasMaxLengthAttribute)
                                      ^ (vf.HasIndexAttribute && vf.Type != stringType)
                                      ^ (vf.HasIndexAttribute && vf.HasMaxLengthAttribute))
         .AssertAll<ValueField>(vf => !(vf.HasKeyAttribute && vf.HasIndexAttribute));
 }
Пример #8
0
 private CssMediaFeature(string aName, RangeType aRangeType, ValueType aValueType, int[] aKeywordTable, string aMetric)
 {
     mName = aName;
     mRangeType = aRangeType;
     mValueType = aValueType;
     mKeywordTable = aKeywordTable;
     mMetric = aMetric;
 }
Пример #9
0
 public CastFunction(ValueType type)
     : base(Fixity.Prefix, 1)
 {
     CastType = type;
     Signature.InputSignature.Clear();
     Signature.InputSignature.Add(ValueType.BlankIdentifier);
     Signature.OutputSignature = ValueType.BlankIdentifier;
 }
		public ValueCorrectionViewModel(ValueType type)
		{
			if (type == ValueType.Integer)
				_format = "0";
			else if (type == ValueType.Percent)
				_format = "P2";
			else
				_format = "0.00";
		}
Пример #11
0
        public FunctionType(Fixity fixity, int numArguments = 2)
            : base("FunctionType")
        {
            Fixity = fixity;
            InputSignature = new List<ValueType>();

            if (fixity != Hype.Fixity.Prefix && numArguments != 2) throw new Exception("Infix functions can only take 2 arguments.");

            for (int i = 0; i < numArguments; ++i)
            {
                InputSignature.Add(ValueType.Uncertain);
            }
            OutputSignature = ValueType.Uncertain;
        }
		private static string GetName(ValueType type)
		{
			var index = (int)type;
			var names = new string[] {
				"Null",
				"Boolean",
				"Integer",
				"UInteger",
				"Number",
				"String",
				"Array",
				"Object",
			};
			return (index >= 0 && index < names.Length) ? names[index] : "Unknown";
		}
Пример #13
0
        static void Main(string[] args)
        {
            var referenceInstance = new ReferenceType();
            referenceInstance.Number = 1;
            referenceInstance.String = "one";

            ChangeProperties(referenceInstance);
            Console.WriteLine("reference: {0} {1}", referenceInstance.Number, referenceInstance.String);

            var valueInstance = new ValueType();
            valueInstance.Number = 1;
            valueInstance.String = "one";

            ChangeProperties(valueInstance);
            Console.WriteLine("value: {0} {1}", valueInstance.Number, valueInstance.String);
        }
Пример #14
0
        /// <summary>Assigns all needed attributes to the tag</summary>
        /// <returns>This instance downcasted to base class</returns>
        public virtual IndexedTag attr(
            string id = null,
            string name = null,
            string value = null,
            ValueType? valuetype = null,
            MimeType type = null
        )
        {
            Id = id;
            Name = name;
            Value = value;
            ValueType = valuetype;
            Type = type;

            return this;
        }
Пример #15
0
        internal ConstNode(DataTable table, ValueType type, object constant, bool fParseQuotes) : base(table)
        {
            switch (type)
            {
                case ValueType.Null:
                    _val = DBNull.Value;
                    break;

                case ValueType.Numeric:
                    _val = SmallestNumeric(constant);
                    break;
                case ValueType.Decimal:
                    _val = SmallestDecimal(constant);
                    break;
                case ValueType.Float:
                    _val = Convert.ToDouble(constant, NumberFormatInfo.InvariantInfo);
                    break;

                case ValueType.Bool:
                    _val = Convert.ToBoolean(constant, CultureInfo.InvariantCulture);
                    break;

                case ValueType.Str:
                    if (fParseQuotes)
                    {
                        // replace '' with one '
                        _val = ((string)constant).Replace("''", "'");
                    }
                    else
                    {
                        _val = (string)constant;
                    }
                    break;

                case ValueType.Date:
                    _val = DateTime.Parse((string)constant, CultureInfo.InvariantCulture);
                    break;

                case ValueType.Object:
                    _val = constant;
                    break;

                default:
                    Debug.Assert(false, "NYI");
                    goto case ValueType.Object;
            }
        }
 internal static void AddDatabaseGeneratedRuleConstraints(
     ConstraintBuilder constraintBuilder, ValueType stringType, ValueType numberType, ValueType guidType)
 {
     constraintBuilder
         .AssertAll<ValueField>(f => (!f.IsPrimaryKey && f.DatabaseGeneratedAttribute == DatabaseGeneratedAttribute.None)
                                     ^
                                     (
                                         f.IsPrimaryKey
                                         &&
                                         (
                                             (f.Type == stringType && f.DatabaseGeneratedAttribute == DatabaseGeneratedAttribute.Computed)
                                             ^ (f.Type == numberType && f.DatabaseGeneratedAttribute != DatabaseGeneratedAttribute.Computed)
                                             ^ (f.Type == guidType && f.DatabaseGeneratedAttribute != DatabaseGeneratedAttribute.Identity)
                                         )
                                     )
                               );
 }
Пример #17
0
		public Value(Value value)
		{
			Type = value.Type;
			switch (Type) {
				case ValueType.String:
					Str = value.Str;
					break;
				case ValueType.Number:
					Number = value.Number;
					break;
				case ValueType.Object:
					if (value.Obj != null)
						Obj = new Object(value.Obj);
					break;
				case ValueType.Array:
					Array = new Array(value.Array);
					break;
				case ValueType.Boolean:
					Boolean = value.Boolean;
					break;
			}
		}
Пример #18
0
        /// <summary>
        /// 值类型转string
        /// </summary>
        /// <param name="inputObj">输入</param>
        /// <param name="defaultStr">转换失败默认值</param>
        /// <returns></returns>
        public static string TryToString(this ValueType inputObj, string defaultStr = "")
        {
            var output = inputObj.IsNull() ? defaultStr : inputObj.ToString();

            return(output);
        }
Пример #19
0
 public Task <string> FindJsonByIdAsync <T>(ValueType id, CancellationToken token) where T : class
 {
     return(findJsonByIdAsync <T>(id, token));
 }
Пример #20
0
	public static int test_0_more_cast_corner_cases () {
		ValueType[] vta = new ValueType [0];
		Enum[] ea = new Enum [0];
		Array a = vta;
		object[] oa;
		bool ok;

		if (!(a is object[]))
			return 1;
		if (!(a is ValueType[]))
			return 2;
		if (a is Enum[])
			return 3;
		a = ea;
		if (!(a is object[]))
			return 4;
		if (!(a is ValueType[]))
			return 5;
		if (!(a is Enum[]))
			return 6;

		try {
			ok = true;
			oa = (object[])a;
		} catch {
			ok = false;
		}
		if (!ok)
			return 7;
	
		try {
			ok = true;
			oa = (Enum[])a;
		} catch {
			ok = false;
		}
		if (!ok)
			return 8;
	
		try {
			ok = true;
			oa = (ValueType[])a;
		} catch {
			ok = false;
		}
		if (!ok)
			return 9;

		a = vta;
		try {
			ok = true;
			oa = (object[])a;
		} catch {
			ok = false;
		}
		if (!ok)
			return 10;
	
		try {
			ok = true;
			oa = (ValueType[])a;
		} catch {
			ok = false;
		}
		if (!ok)
			return 11;
	
		try {
			ok = false;
			vta = (Enum[])a;
		} catch {
			ok = true;
		}
		if (!ok)
			return 12;
		return 0;
	}
Пример #21
0
 private static bool BoxUnboxToQ1(ValueType vt)
 {
     return(BoxUnboxToQ2((ExplicitFieldOffsetStruct?)vt));
 }
Пример #22
0
 private static bool BoxUnboxToNQ1(ValueType vt)
 {
     Console.WriteLine("BoxUnboxToNQ1: {0}", vt);
     return(BoxUnboxToNQ2((char)vt));
 }
Пример #23
0
        public static void Main(string[] args)
        {
            // Ну куда же без Hello world
            Console.WriteLine("Hello world!");

            #region Про числа
            // Разные численные типы имеют разные суффиксы:
            int   a1 = 1;
            uint  a2 = 1U;
            long  a3 = 1L;
            ulong a4 = 1UL;

            double  b1 = 1.1;
            float   b2 = 1.1f; // 1.1F
            decimal b3 = 1.1m; // 1.1M

            // Отличия double от decimal
            double a = 0.1;
            double b = 0.2;

            decimal c = 0.1m;
            decimal d = 0.2m;
            Console.WriteLine($"a + b == 0.3? {a + b == 0.3}");
            Console.WriteLine($"c + d == 0.3? {c + d == 0.3m}");
            #endregion

            #region Про типы
            var x1 = new RefType {
                n = 1
            };
            var x2 = new ValueType {
                n = 1
            };
            RefMethod(x1);
            ValueMethod(x2);
            Console.WriteLine($"x1:{x1.n} x2:{x2.n}");
            // В итоге у x1 поменялось значение, а у x2 - нет.
            #endregion

            #region ref и out
            ValueType x3 = x2;
            ValueMethodRef(ref x3);
            ValueMethodOut(out ValueType x4);
            Console.WriteLine($"x3:{x3.n} x4:{x4.n}");

            // Что будет, есть в качестве ref-параметра передать ссылочный тип?
            RefMethodRef(x1);
            Console.WriteLine($"x1:{x1.n}");
            RefMethodRef(ref x1);
            Console.WriteLine($"x1:{x1.n}");
            #endregion

            #region is/as
            int a_is = 5;
            Console.WriteLine($"a is int: {a_is is int}; a is short: {a_is is short}; a is double: {a_is is double}; a is object: {a_is is object}");
            object o    = 5;
            int?   a_as = o as int?;
            if (a_as != null)
            {
                Console.WriteLine($"a as int");
            }
            else
            {
                Console.WriteLine($"a not as int");
            }
            #endregion

            #region Pattern matching
            object ptn = 5;
            switch (ptn)
            {
            case int as_int:
                Console.WriteLine("As int");
                break;

            case string as_string:
                Console.WriteLine("As string");
                break;

            case object as_object:
                Console.WriteLine("As Object");
                break;
                // Попробуем поменять кейсы местами
            }
            #endregion

            #region Контроль переполнения
            byte byteA = 200;
            byte byteB;
            try
            {
                byteB = checked ((byte)(2 * byteA));
                //byteB = unchecked((byte)(2 * byteA));
                //byteB = (byte)checked(2 * byteA);
                Console.WriteLine(byteB);
            } catch (Exception e) {
                Console.WriteLine(e.Message);
            }

            try
            {
                checked
                {
                    byteB = checked ((byte)(2 * byteA));
                    Console.WriteLine(byteB);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            #endregion

            #region Про Nullable
            int?nullable_a = 42;
            Console.WriteLine(nullable_a?.ToString());   // Метод применяется, если объект не null
            int?null_a      = null;
            int x_from_null = null_a ?? nullable_a ?? 5; // как тренарный оператор только про null
            Console.WriteLine($"x={x_from_null}");
            #endregion

            #region Про перечисления
            Color color = Color.Blue;
            Console.WriteLine(color);
            color = (Color)Enum.Parse(typeof(Color), "Red");
            Console.WriteLine(color);
            color = (Color)Enum.Parse(typeof(Color), "0");
            Console.WriteLine(color);

            Permission permission = Permission.Move | Permission.Write;
            Console.WriteLine(permission.ToString());
            #endregion
        }
Пример #24
0
        List <Value> CoerceValuesToSingleType(List <Runtime.Object> parametersIn)
        {
            ValueType valType = ValueType.Int;

            ListValue specialCaseList = null;

            // Find out what the output type is
            // "higher level" types infect both so that binary operations
            // use the same type on both sides. e.g. binary operation of
            // int and float causes the int to be casted to a float.
            foreach (var obj in parametersIn)
            {
                var val = (Value)obj;
                if (val.valueType > valType)
                {
                    valType = val.valueType;
                }

                if (val.valueType == ValueType.List)
                {
                    specialCaseList = val as ListValue;
                }
            }

            // Coerce to this chosen type
            var parametersOut = new List <Value> ();

            // Special case: Coercing to Ints to Lists
            // We have to do it early when we have both parameters
            // to hand - so that we can make use of the List's origin
            if (valType == ValueType.List)
            {
                foreach (Value val in parametersIn)
                {
                    if (val.valueType == ValueType.List)
                    {
                        parametersOut.Add(val);
                    }
                    else if (val.valueType == ValueType.Int)
                    {
                        int intVal = (int)val.valueObject;
                        var list   = specialCaseList.value.originOfMaxItem;

                        InkListItem item;
                        if (list.TryGetItemWithValue(intVal, out item))
                        {
                            var castedValue = new ListValue(item, intVal);
                            parametersOut.Add(castedValue);
                        }
                        else
                        {
                            throw new StoryException("Could not find List item with the value " + intVal + " in " + list.name);
                        }
                    }
                    else
                    {
                        throw new StoryException("Cannot mix Lists and " + val.valueType + " values in this operation");
                    }
                }
            }

            // Normal Coercing (with standard casting)
            else
            {
                foreach (Value val in parametersIn)
                {
                    var castedValue = val.Cast(valType);
                    parametersOut.Add(castedValue);
                }
            }

            return(parametersOut);
        }
Пример #25
0
 public PlayerPrefsEntry(string key, int value)
 {
     this.key   = key;
     this.value = value;
     this.Type  = ValueType.Int;
 }
Пример #26
0
 static void ValueMethod(ValueType x)
 {
     x.n += 1;
 }
Пример #27
0
 public abstract Value Cast(ValueType newType);
Пример #28
0
        public static void RunTopFunction(VirtualMachine vm)
        {
#if DEBUG_TRACE
            var debugSb = new StringBuilder();
#endif

            var bytes  = vm.chunk.bytes.buffer;
            var memory = vm.memory;

            var codeIndex      = vm.callFrameStack.buffer[vm.callFrameStack.count - 1].codeIndex;
            var baseStackIndex = vm.callFrameStack.buffer[vm.callFrameStack.count - 1].baseStackIndex;

            while (true)
            {
#if DEBUG_TRACE
                debugSb.Clear();
                vm.memory = memory;
                VirtualMachineHelper.TraceStack(vm, debugSb);
                vm.chunk.DisassembleInstruction(codeIndex, debugSb);
                System.Console.WriteLine(debugSb);
#endif

                var nextInstruction = (Instruction)bytes[codeIndex++];
                switch (nextInstruction)
                {
                case Instruction.Halt:
                    --vm.callFrameStack.count;
                    vm.memory = memory;
                    return;

                case Instruction.Call:
                {
                    baseStackIndex = memory.stackCount - bytes[codeIndex++];
                    var functionIndex = memory.values[baseStackIndex - 1].asInt;

                    vm.callFrameStack.buffer[vm.callFrameStack.count - 1].codeIndex = codeIndex;
                    codeIndex = vm.chunk.functions.buffer[functionIndex].codeIndex;

                    vm.callFrameStack.PushBackUnchecked(
                        new CallFrame(
                            codeIndex,
                            baseStackIndex,
                            (ushort)functionIndex,
                            CallFrame.Type.Function
                            )
                        );
                    break;
                }

                case Instruction.CallNative:
                {
                    var stackTop      = memory.stackCount - bytes[codeIndex++];
                    var functionIndex = memory.values[stackTop - 1].asInt;
                    var function      = vm.chunk.nativeFunctions.buffer[functionIndex];

                    vm.memory = memory;
                    vm.callFrameStack.buffer[vm.callFrameStack.count - 1].codeIndex = codeIndex;
                    vm.callFrameStack.PushBackUnchecked(
                        new CallFrame(
                            0,
                            stackTop,
                            (ushort)functionIndex,
                            CallFrame.Type.NativeFunction
                            )
                        );

                    try
                    {
                        function.callback(vm, stackTop);
                    }
                    catch (System.Exception e)
                    {
                        vm.Error(string.Format("{0}\nnative stack trace:\n{1}", e.Message, e.StackTrace));
                        return;
                    }

                    memory = vm.memory;

                    var dstIdx = --stackTop;
                    var srcIdx = memory.stackCount - function.returnSize;

                    while (srcIdx < memory.stackCount)
                    {
                        memory.values[dstIdx++] = memory.values[srcIdx++];
                    }

                    memory.stackCount = stackTop + function.returnSize;

                    --vm.callFrameStack.count;
                    break;
                }

                case Instruction.Return:
                {
                    var size   = bytes[codeIndex++];
                    var dstIdx = --baseStackIndex;
                    var srcIdx = memory.stackCount - size;

                    while (srcIdx < memory.stackCount)
                    {
                        memory.values[dstIdx++] = memory.values[srcIdx++];
                    }

                    memory.stackCount = baseStackIndex + size;

                    --vm.callFrameStack.count;
                    codeIndex      = vm.callFrameStack.buffer[vm.callFrameStack.count - 1].codeIndex;
                    baseStackIndex = vm.callFrameStack.buffer[vm.callFrameStack.count - 1].baseStackIndex;
                    break;
                }

                case Instruction.Print:
                {
                    var type = ValueType.Read(
                        bytes[codeIndex++],
                        bytes[codeIndex++],
                        bytes[codeIndex++],
                        bytes[codeIndex++]
                        );

                    var sb   = new StringBuilder();
                    var size = type.GetSize(vm.chunk);

                    VirtualMachineHelper.ValueToString(
                        vm,
                        memory.stackCount - size,
                        type,
                        sb
                        );
                    memory.stackCount -= size;

                    System.Console.WriteLine(sb);
                    break;
                }

                case Instruction.Pop:
                    --memory.stackCount;
                    break;

                case Instruction.PopMultiple:
                    memory.stackCount -= bytes[codeIndex++];
                    break;

                case Instruction.Move:
                {
                    var sizeUnderMove = bytes[codeIndex++];
                    var sizeToMove    = bytes[codeIndex++];

                    var srcIdx = memory.stackCount - sizeToMove;
                    var dstIdx = srcIdx - sizeUnderMove;

                    while (srcIdx < memory.stackCount)
                    {
                        memory.values[dstIdx++] = memory.values[srcIdx++];
                    }

                    memory.stackCount = dstIdx;
                }
                break;

                case Instruction.LoadUnit:
                    memory.PushBackStack(new ValueData());
                    break;

                case Instruction.LoadFalse:
                    memory.PushBackStack(new ValueData(false));
                    break;

                case Instruction.LoadTrue:
                    memory.PushBackStack(new ValueData(true));
                    break;

                case Instruction.LoadLiteral:
                {
                    var index = BytesHelper.BytesToUShort(bytes[codeIndex++], bytes[codeIndex++]);
                    memory.PushBackStack(vm.chunk.literalData.buffer[index]);
                    break;
                }

                case Instruction.LoadFunction:
                case Instruction.LoadNativeFunction:
                {
                    var index = BytesHelper.BytesToUShort(bytes[codeIndex++], bytes[codeIndex++]);
                    memory.PushBackStack(new ValueData(index));
                    break;
                }

                case Instruction.SetLocal:
                {
                    var index = baseStackIndex + bytes[codeIndex++];
                    memory.values[index] = memory.values[--memory.stackCount];
                    break;
                }

                case Instruction.LoadLocal:
                {
                    var index = baseStackIndex + bytes[codeIndex++];
                    memory.PushBackStack(memory.values[index]);
                    break;
                }

                case Instruction.SetLocalMultiple:
                {
                    var dstIdx = baseStackIndex + bytes[codeIndex++];

                    var endIndex = memory.stackCount;
                    memory.stackCount -= bytes[codeIndex++];
                    var srcIdx = memory.stackCount;

                    while (srcIdx < endIndex)
                    {
                        memory.values[dstIdx++] = memory.values[srcIdx++];
                    }
                    break;
                }

                case Instruction.LoadLocalMultiple:
                {
                    var srcIdx = baseStackIndex + bytes[codeIndex++];
                    var dstIdx = memory.stackCount;
                    memory.GrowStack(bytes[codeIndex++]);

                    while (dstIdx < memory.stackCount)
                    {
                        memory.values[dstIdx++] = memory.values[srcIdx++];
                    }
                    break;
                }

                case Instruction.IncrementLocalInt:
                {
                    var index = baseStackIndex + bytes[codeIndex++];
                    ++memory.values[index].asInt;
                    break;
                }

                case Instruction.IntToFloat:
                    memory.values[memory.stackCount - 1] = new ValueData((float)memory.values[memory.stackCount - 1].asInt);
                    break;

                case Instruction.FloatToInt:
                    memory.values[memory.stackCount - 1] = new ValueData((int)memory.values[memory.stackCount - 1].asFloat);
                    break;

                case Instruction.CreateArrayFromStack:
                {
                    var elementSize = bytes[codeIndex++];
                    var arrayLength = bytes[codeIndex++];
                    var arraySize   = elementSize * arrayLength;
                    memory.GrowHeap(arraySize + 1);
                    var headAddress = memory.heapStart;
                    memory.stackCount -= arraySize;

                    memory.values[headAddress++] = new ValueData(arrayLength);

                    for (var i = 0; i < arraySize; i++)
                    {
                        memory.values[headAddress + i] = memory.values[memory.stackCount + i];
                    }

                    memory.values[memory.stackCount++] = new ValueData(headAddress);
                    break;
                }

                case Instruction.CreateArrayFromDefault:
                {
                    var elementSize = bytes[codeIndex++];
                    var arrayLength = memory.values[--memory.stackCount].asInt;
                    if (arrayLength < 0)
                    {
                        vm.callFrameStack.buffer[vm.callFrameStack.count - 1].codeIndex = codeIndex;
                        vm.Error("Negative array length");
                        vm.memory = memory;
                        return;
                    }

                    var arraySize = elementSize * arrayLength;
                    memory.GrowHeap(arraySize + 1);
                    var headAddress = memory.heapStart;
                    memory.stackCount -= elementSize;

                    memory.values[headAddress++] = new ValueData(arrayLength);

                    for (var i = 0; i < arraySize; i += elementSize)
                    {
                        for (var j = 0; j < elementSize; j++)
                        {
                            memory.values[headAddress + i + j] = memory.values[memory.stackCount + j];
                        }
                    }

                    memory.values[memory.stackCount++] = new ValueData(headAddress);
                    break;
                }

                case Instruction.LoadArrayLength:
                    memory.values[memory.stackCount - 1] = memory.values[memory.values[memory.stackCount - 1].asInt - 1];
                    break;

                case Instruction.SetArrayElement:
                {
                    var elementSize = bytes[codeIndex++];
                    var fieldSize   = bytes[codeIndex++];
                    var offset      = bytes[codeIndex++];

                    memory.stackCount -= fieldSize;
                    var stackStartIndex = memory.stackCount;

                    var index          = memory.values[--memory.stackCount].asInt;
                    var heapStartIndex = memory.values[--memory.stackCount].asInt;

                    var length = memory.values[heapStartIndex - 1].asInt;
                    if (index < 0 || index >= length)
                    {
                        vm.callFrameStack.buffer[vm.callFrameStack.count - 1].codeIndex = codeIndex;
                        vm.Error(string.Format("Index out of bounds. Index: {0}. Array length: {1}", index, length));
                        vm.memory = memory;
                        return;
                    }

                    heapStartIndex += index * elementSize + offset;

                    for (var i = 0; i < fieldSize; i++)
                    {
                        memory.values[heapStartIndex + i] = memory.values[stackStartIndex + i];
                    }
                    break;
                }

                case Instruction.LoadArrayElement:
                {
                    var elementSize = bytes[codeIndex++];
                    var fieldSize   = bytes[codeIndex++];
                    var offset      = bytes[codeIndex++];

                    var index          = memory.values[--memory.stackCount].asInt;
                    var heapStartIndex = memory.values[--memory.stackCount].asInt;

                    var length = memory.values[heapStartIndex - 1].asInt;
                    if (index < 0 || index >= length)
                    {
                        vm.callFrameStack.buffer[vm.callFrameStack.count - 1].codeIndex = codeIndex;
                        vm.Error(string.Format("Index out of bounds. Index: {0}. Array length: {1}", index, length));
                        vm.memory = memory;
                        return;
                    }

                    heapStartIndex += index * elementSize + offset;
                    var stackStartIndex = memory.stackCount;
                    memory.GrowStack(fieldSize);

                    for (var i = 0; i < fieldSize; i++)
                    {
                        memory.values[stackStartIndex + i] = memory.values[heapStartIndex + i];
                    }
                    break;
                }

                case Instruction.CreateStackReference:
                {
                    var index = baseStackIndex + bytes[codeIndex++];
                    memory.PushBackStack(new ValueData(index));
                    break;
                }

                case Instruction.CreateArrayElementReference:
                {
                    var elementSize      = bytes[codeIndex++];
                    var arrayIndexOffset = elementSize * memory.values[--memory.stackCount].asInt;
                    var index            = memory.values[--memory.stackCount].asInt + arrayIndexOffset + bytes[codeIndex++];
                    memory.PushBackStack(new ValueData(index));
                    break;
                }

                case Instruction.SetReference:
                {
                    var dstIdx = baseStackIndex + bytes[codeIndex++];
                    dstIdx = memory.values[dstIdx].asInt + bytes[codeIndex++];

                    var endIndex = memory.stackCount;
                    memory.stackCount -= bytes[codeIndex++];
                    var srcIdx = memory.stackCount;

                    while (srcIdx < endIndex)
                    {
                        memory.values[dstIdx++] = memory.values[srcIdx++];
                    }
                    break;
                }

                case Instruction.LoadReference:
                {
                    var srcIdx = baseStackIndex + bytes[codeIndex++];
                    srcIdx = memory.values[srcIdx].asInt + bytes[codeIndex++];
                    var dstIdx = memory.stackCount;
                    memory.GrowStack(bytes[codeIndex++]);

                    while (dstIdx < memory.stackCount)
                    {
                        memory.values[dstIdx++] = memory.values[srcIdx++];
                    }
                    break;
                }

                case Instruction.NegateInt:
                    memory.values[memory.stackCount - 1].asInt = -memory.values[memory.stackCount - 1].asInt;
                    break;

                case Instruction.NegateFloat:
                    memory.values[memory.stackCount - 1].asFloat = -memory.values[memory.stackCount - 1].asFloat;
                    break;

                case Instruction.AddInt:
                    memory.values[memory.stackCount - 2].asInt += memory.values[--memory.stackCount].asInt;
                    break;

                case Instruction.AddFloat:
                    memory.values[memory.stackCount - 2].asFloat += memory.values[--memory.stackCount].asFloat;
                    break;

                case Instruction.SubtractInt:
                    memory.values[memory.stackCount - 2].asInt -= memory.values[--memory.stackCount].asInt;
                    break;

                case Instruction.SubtractFloat:
                    memory.values[memory.stackCount - 2].asFloat -= memory.values[--memory.stackCount].asFloat;
                    break;

                case Instruction.MultiplyInt:
                    memory.values[memory.stackCount - 2].asInt *= memory.values[--memory.stackCount].asInt;
                    break;

                case Instruction.MultiplyFloat:
                    memory.values[memory.stackCount - 2].asFloat *= memory.values[--memory.stackCount].asFloat;
                    break;

                case Instruction.DivideInt:
                    memory.values[memory.stackCount - 2].asInt /= memory.values[--memory.stackCount].asInt;
                    break;

                case Instruction.DivideFloat:
                    memory.values[memory.stackCount - 2].asFloat /= memory.values[--memory.stackCount].asFloat;
                    break;

                case Instruction.Not:
                    memory.values[memory.stackCount - 1].asBool = !memory.values[memory.stackCount - 1].asBool;
                    break;

                case Instruction.EqualBool:
                    memory.PushBackStack(new ValueData(memory.values[--memory.stackCount].asBool == memory.values[--memory.stackCount].asBool));
                    break;

                case Instruction.EqualInt:
                    memory.PushBackStack(new ValueData(memory.values[--memory.stackCount].asInt == memory.values[--memory.stackCount].asInt));
                    break;

                case Instruction.EqualFloat:
                    memory.PushBackStack(new ValueData(memory.values[--memory.stackCount].asFloat == memory.values[--memory.stackCount].asFloat));
                    break;

                case Instruction.EqualString:
                    memory.PushBackStack(new ValueData(
                                             (vm.nativeObjects.buffer[memory.values[--memory.stackCount].asInt] as string).Equals(
                                                 vm.nativeObjects.buffer[memory.values[--memory.stackCount].asInt] as string)
                                             ));
                    break;

                case Instruction.GreaterInt:
                    memory.PushBackStack(new ValueData(memory.values[--memory.stackCount].asInt < memory.values[--memory.stackCount].asInt));
                    break;

                case Instruction.GreaterFloat:
                    memory.PushBackStack(new ValueData(memory.values[--memory.stackCount].asFloat < memory.values[--memory.stackCount].asFloat));
                    break;

                case Instruction.LessInt:
                    memory.PushBackStack(new ValueData(memory.values[--memory.stackCount].asInt > memory.values[--memory.stackCount].asInt));
                    break;

                case Instruction.LessFloat:
                    memory.PushBackStack(new ValueData(memory.values[--memory.stackCount].asFloat > memory.values[--memory.stackCount].asFloat));
                    break;

                case Instruction.JumpForward:
                {
                    var offset = BytesHelper.BytesToUShort(bytes[codeIndex++], bytes[codeIndex++]);
                    codeIndex += offset;
                    break;
                }

                case Instruction.JumpBackward:
                {
                    var offset = BytesHelper.BytesToUShort(bytes[codeIndex++], bytes[codeIndex++]);
                    codeIndex -= offset;
                    break;
                }

                case Instruction.JumpForwardIfFalse:
                {
                    var offset = BytesHelper.BytesToUShort(bytes[codeIndex++], bytes[codeIndex++]);
                    if (!memory.values[memory.stackCount - 1].asBool)
                    {
                        codeIndex += offset;
                    }
                    break;
                }

                case Instruction.JumpForwardIfTrue:
                {
                    var offset = BytesHelper.BytesToUShort(bytes[codeIndex++], bytes[codeIndex++]);
                    if (memory.values[memory.stackCount - 1].asBool)
                    {
                        codeIndex += offset;
                    }
                    break;
                }

                case Instruction.PopAndJumpForwardIfFalse:
                {
                    var offset = BytesHelper.BytesToUShort(bytes[codeIndex++], bytes[codeIndex++]);
                    if (!memory.values[--memory.stackCount].asBool)
                    {
                        codeIndex += offset;
                    }
                    break;
                }

                case Instruction.RepeatLoopCheck:
                {
                    var index = baseStackIndex + bytes[codeIndex++];
                    var less  = memory.values[index].asInt < memory.values[index + 1].asInt;
                    memory.PushBackStack(new ValueData(less));
                    break;
                }

                case Instruction.DebugHook:
                    if (vm.debugger.isSome)
                    {
                        vm.memory = memory;
                        vm.callFrameStack.buffer[vm.callFrameStack.count - 1].codeIndex = codeIndex;
                        vm.debugger.value.OnDebugHook();
                    }
                    break;

                case Instruction.DebugPushFrame:
                    vm.debugData.frameStack.PushBack(new DebugData.Frame(
                                                         (ushort)vm.debugData.stackTypes.count,
                                                         (ushort)vm.debugData.stackNames.count
                                                         ));
                    break;

                case Instruction.DebugPopFrame:
                {
                    var frame = vm.debugData.frameStack.PopLast();
                    vm.debugData.stackTypes.count = frame.stackTypesBaseIndex;
                    vm.debugData.stackNames.count = frame.stackNamesBaseIndex;
                }
                break;

                case Instruction.DebugPushType:
                {
                    var type = ValueType.Read(
                        bytes[codeIndex++],
                        bytes[codeIndex++],
                        bytes[codeIndex++],
                        bytes[codeIndex++]
                        );

                    vm.debugData.stackTypes.PushBack(type);
                    break;
                }

                case Instruction.DebugPopTypeMultiple:
                    vm.debugData.stackTypes.count -= bytes[codeIndex++];
                    break;

                case Instruction.DebugPushLocalVariableName:
                {
                    var literalIndex = BytesHelper.BytesToUShort(bytes[codeIndex++], bytes[codeIndex++]);
                    var stringIndex  = vm.chunk.literalData.buffer[literalIndex].asInt;
                    var name         = vm.chunk.stringLiterals.buffer[stringIndex];
                    vm.debugData.stackNames.PushBack(name);
                    break;
                }

                case Instruction.DebugPopLocalVariableNameMultiple:
                    vm.debugData.stackNames.count -= bytes[codeIndex++];
                    break;

                default:
                    break;
                }
            }
        }
Пример #29
0
 public ValueExpression(object value, ValueType type)
 {
     Value = value;
     Type  = type;
 }
Пример #30
0
 public string GetDescription(ValueType value)
 {
     return(_descriptionByValue[value]);
 }
Пример #31
0
 void ValueMethod.CopyTo(ValueType into) => ((Reference)into).Set(Get());
Пример #32
0
        public Task <T> LoadAsync <T>(ValueType id, CancellationToken token = default(CancellationToken))
        {
            var documentKey = Conventions.FindFullDocumentKeyFromNonStringIdentifier(id, typeof(T), false);

            return(LoadAsync <T>(documentKey, token));
        }
Пример #33
0
 private static bool BoxUnboxToQ(ValueType o)
 {
     return(Helper.Compare((byte?)o, Helper.Create(default(byte))));
 }
Пример #34
0
    void OnGUI()
    {
        GUIStyle boldNumberFieldStyle = new GUIStyle(EditorStyles.numberField);

        boldNumberFieldStyle.font = EditorStyles.boldFont;

        GUIStyle boldToggleStyle = new GUIStyle(EditorStyles.toggle);

        boldToggleStyle.font = EditorStyles.boldFont;

        GUI.enabled = !waitTillPlistHasBeenWritten;

        //Toolbar
        EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
        {
            Rect optionsRect = GUILayoutUtility.GetRect(0, 20, GUILayout.ExpandWidth(false));

            if (GUILayout.Button(new GUIContent("Sort   " + (sortAscending ? "▼" : "▲"), "Change sorting to " + (sortAscending ? "descending" : "ascending")), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false)))
            {
                OnChangeSortModeClicked();
            }

            if (GUILayout.Button(new GUIContent("Options", "Contains additional functionality like \"Add new entry\" and \"Delete all entries\" "), EditorStyles.toolbarDropDown, GUILayout.ExpandWidth(false)))
            {
                GenericMenu options = new GenericMenu();
                options.AddItem(new GUIContent("New Entry..."), false, OnNewEntryClicked);
                options.AddSeparator("");
                options.AddItem(new GUIContent("Delete Selected Entries"), false, OnDeleteSelectedClicked);
                options.AddItem(new GUIContent("Delete All Entries"), false, OnDeleteAllClicked);
                options.DropDown(optionsRect);
            }

            GUILayout.FlexibleSpace();

            if (Application.platform == RuntimePlatform.WindowsEditor)
            {
                string refreshTooltip = "Should all entries be automaticly refreshed every " + UpdateIntervalInSeconds + " seconds?";
                autoRefresh = GUILayout.Toggle(autoRefresh, new GUIContent("Auto Refresh ", refreshTooltip), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false), GUILayout.MinWidth(20));
            }

            if (GUILayout.Button(new GUIContent(RefreshIcon, "Force a refresh, could take a few seconds."), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(false)))
            {
                RefreshKeys();
            }

            Rect r;
            if (Application.platform == RuntimePlatform.OSXEditor)
            {
                r = GUILayoutUtility.GetRect(16, 16);
            }
            else
            {
                r = GUILayoutUtility.GetRect(9, 16);
            }

            if (waitTillPlistHasBeenWritten)
            {
                Texture2D t = AssetDatabase.LoadAssetAtPath(IconsPath + "loader/" + (Mathf.FloorToInt(rotation % 12) + 1) + ".png", typeof(Texture2D)) as Texture2D;

                GUI.DrawTexture(new Rect(r.x + 3, r.y, 16, 16), t);
            }
        }
        EditorGUILayout.EndHorizontal();

        GUI.enabled = !waitTillPlistHasBeenWritten;

        if (showNewEntryBox)
        {
            GUILayout.BeginHorizontal(GUI.skin.box);
            {
                GUILayout.BeginVertical(GUILayout.ExpandWidth(true));
                {
                    newKey = EditorGUILayout.TextField("Key", newKey);
                    switch (selectedType)
                    {
                    default:
                    case ValueType.String:
                        newValueString = EditorGUILayout.TextField("Value", newValueString);
                        break;

                    case ValueType.Float:
                        newValueFloat = EditorGUILayout.FloatField("Value", newValueFloat);
                        break;

                    case ValueType.Int:
                        newValueInt = EditorGUILayout.IntField("Value", newValueInt);
                        break;
                    }

                    selectedType = (ValueType)EditorGUILayout.EnumPopup("Type", selectedType);
                }
                GUILayout.EndVertical();

                GUILayout.BeginVertical(GUILayout.Width(1));
                {
                    GUILayout.BeginHorizontal();
                    {
                        GUILayout.FlexibleSpace();

                        if (GUILayout.Button(new GUIContent("X", "Close"), EditorStyles.boldLabel, GUILayout.ExpandWidth(false)))
                        {
                            showNewEntryBox = false;
                        }
                    }
                    GUILayout.EndHorizontal();

                    if (GUILayout.Button(new GUIContent(AddIcon, "Add a new key-value.")))
                    {
                        if (!string.IsNullOrEmpty(newKey))
                        {
                            switch (selectedType)
                            {
                            case ValueType.Int:
                                PlayerPrefs.SetInt(newKey, newValueInt);
                                ppeList.Add(new PlayerPrefsEntry(newKey, newValueInt));
                                break;

                            case ValueType.Float:
                                PlayerPrefs.SetFloat(newKey, newValueFloat);
                                ppeList.Add(new PlayerPrefsEntry(newKey, newValueFloat));
                                break;

                            default:
                            case ValueType.String:
                                PlayerPrefs.SetString(newKey, newValueString);
                                ppeList.Add(new PlayerPrefsEntry(newKey, newValueString));
                                break;
                            }
                            PlayerPrefs.Save();
                        }

                        newKey        = newValueString = "";
                        newValueInt   = 0;
                        newValueFloat = 0;
                        GUIUtility.keyboardControl = 0; //move focus from textfield, else the text won't be cleared
                        showNewEntryBox            = false;
                    }
                }
                GUILayout.EndVertical();
            }
            GUILayout.EndHorizontal();
        }

        GUILayout.Space(2);


        GUI.backgroundColor = Color.white;
        EditorGUI.indentLevel++;
        scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
        {
            EditorGUILayout.BeginVertical();
            {
                for (int i = 0; i < ppeList.Count; i++)
                {
                    if (ppeList[i].Value != null)
                    {
                        EditorGUILayout.BeginHorizontal();
                        {
                            ppeList[i].IsSelected = GUILayout.Toggle(ppeList[i].IsSelected, new GUIContent(ppeList[i].Key, "Toggle selection."), ppeList[i].HasChanged ? boldToggleStyle : EditorStyles.toggle, GUILayout.MinWidth(40), GUILayout.MaxWidth(125), GUILayout.ExpandWidth(true));

                            GUIStyle numberFieldStyle = ppeList[i].HasChanged ? boldNumberFieldStyle : EditorStyles.numberField;

                            switch (ppeList[i].Type)
                            {
                            default:
                            case ValueType.String:
                                ppeList[i].Value = EditorGUILayout.TextField("", (string)ppeList[i].Value, numberFieldStyle, GUILayout.MinWidth(40));
                                break;

                            case ValueType.Float:
                                ppeList[i].Value = EditorGUILayout.FloatField("", (float)ppeList[i].Value, numberFieldStyle, GUILayout.MinWidth(40));
                                break;

                            case ValueType.Int:
                                ppeList[i].Value = EditorGUILayout.IntField("", (int)ppeList[i].Value, numberFieldStyle, GUILayout.MinWidth(40));
                                break;
                            }

                            GUI.enabled = ppeList[i].HasChanged && !waitTillPlistHasBeenWritten;
                            if (GUILayout.Button(new GUIContent(SaveIcon, "Save changes made to this value."), GUILayout.ExpandWidth(false)))
                            {
                                ppeList[i].SaveChanges();
                            }

                            if (GUILayout.Button(new GUIContent(UndoIcon, "Discard changes made to this value."), GUILayout.ExpandWidth(false)))
                            {
                                ppeList[i].RevertChanges();
                            }

                            GUI.enabled = !waitTillPlistHasBeenWritten;

                            if (GUILayout.Button(new GUIContent(DeleteIcon, "Delete this key-value."), GUILayout.ExpandWidth(false)))
                            {
                                PlayerPrefs.DeleteKey(ppeList[i].Key);
                                ppeList.Remove(ppeList[i]);
                                PlayerPrefs.Save();
                                break;
                            }
                        }
                        EditorGUILayout.EndHorizontal();
                    }
                }
            }
            EditorGUILayout.EndVertical();
        }
        EditorGUILayout.EndScrollView();
        EditorGUI.indentLevel--;
    }
Пример #35
0
 /// <summary>
 /// Tests whether two specified vectors are not equal.
 /// </summary>
 /// <param name="u">The left-hand vector.</param>
 /// <param name="v">The right-hand vector.</param>
 /// <returns><see langword="true"/> if the two vectors are not equal; otherwise, <see langword="false"/>.</returns>
 public static bool operator !=(Vector4D u, Vector4D v)
 {
     return(!ValueType.Equals(u, v));
 }
Пример #36
0
 static void ValueMethodRef(ref ValueType x)
 {
     x.n += 1;
 }
Пример #37
0
        /// <summary>
        /// Converts a list of DataValues to a list of test values.
        /// </summary>
        private ValueType[] ToValueTypes(SortedDictionary<DateTime, DataValue> values)
        {
            if (values == null || values.Count == 0)
            {
                return null;
            }

            List<ValueType> serializedValues = new List<ValueType>();

            foreach (DataValue dv in values.Values)
            {
                ValueType value = new ValueType();
                value.Timestamp = FormatTimestamp(dv.SourceTimestamp);
                value.Value = FormatValue(dv.WrappedValue);
                value.Quality = FormatQuality(dv.StatusCode);
                value.Comment = dv.Comment;
                serializedValues.Add(value);            
            }

            return serializedValues.ToArray();
        }
Пример #38
0
 public PlayerPrefsEntry(string key, string value)
 {
     this.key = key;
     this.value = value;
     this.Type = ValueType.String;
 }
Пример #39
0
 public PlayerPrefsEntry(string key, float value)
 {
     this.key   = key;
     this.value = value;
     this.Type  = ValueType.Float;
 }
Пример #40
0
 public PlayerPrefsEntry(string key, int value)
 {
     this.key = key;
     this.value = value;
     this.Type = ValueType.Integer;
 }
Пример #41
0
 public PlayerPrefsEntry(string key, string value)
 {
     this.key   = key;
     this.value = value;
     this.Type  = ValueType.String;
 }
Пример #42
0
            public void VisitBooleanNotExpr(bool a, ValueType expected)
            {
                var target = new TypeCheckingVisitor();

                var aExpression = new ConstantExpr(a);
                var expr = new NotExpr(aExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Пример #43
0
 private void InitialSetter(ValueType type, object list)
 {
     BuiltObject = (ItemList <Item>)list;
 }
Пример #44
0
            public void VisitBinaryOperatorTest(object a, object b, Type expressionType, ValueType expectedType)
            {
                var target = new TypeCheckingVisitor();

                var lhs = new ConstantExpr(a);
                var rhs = new ConstantExpr(b);

                var expression = (Expression)Activator.CreateInstance(expressionType, new object[] { lhs, rhs });

                var method =
                    typeof(TypeCheckingVisitor).GetMethods()
                        .First(m => m.Name == "Visit" && m.GetParameters().ElementAt(0).ParameterType == expressionType);

                ValueType actual;

                try
                {
                    actual = (ValueType)method.Invoke(target, new object[] { expression, scope });
                }
                catch (TargetInvocationException ex)
                {
                    throw ex.InnerException;
                }

                Assert.AreEqual(expectedType, actual);
            }
Пример #45
0
 protected StoryException BadCastException(ValueType targetType)
 {
     return(new StoryException("Can't cast " + this.valueObject + " from " + this.valueType + " to " + targetType));
 }
Пример #46
0
 public static bool TryConvertToValueType(this System.Type type, out ValueType value) => systemTypeToValueType.Reference.TryGetValue(type, out value);
Пример #47
0
        /// <summary>
        /// Converts a list of test values to a list of DataValues.
        /// </summary>
        private SortedDictionary<DateTime, DataValue> ToDataValues(ValueType[] values)
        {
            SortedDictionary<DateTime, DataValue> dvs = new SortedDictionary<DateTime, DataValue>();

            if (values != null)
            {
                foreach (ValueType value in values)
                {
                    DataValue dv = new DataValue();
                    dv.Value = ValidateValue(value.Value);
                    dv.StatusCode = ValidateQuality(value.Quality);
                    dv.SourceTimestamp = ValidateTimestamp(value.Timestamp);
                    dv.Comment = value.Comment;
                    dvs[dv.SourceTimestamp] = dv;
                }
            }

            return dvs;
        }
Пример #48
0
 /// <summary>
 /// Tests whether two specified vectors are not equal.
 /// </summary>
 /// <param name="left">A <see cref="Vector4"/> instance.</param>
 /// <param name="right">A <see cref="Vector4"/> instance.</param>
 /// <returns><see langword="true"/> if the two vectors are not equal; otherwise, <see langword="false"/>.</returns>
 public static bool operator !=(Vector4 left, Vector4 right)
 {
     return(!ValueType.Equals(left, right));
 }
Пример #49
0
    void OnGUI()
    {
        GUIStyle boldNumberFieldStyle = new GUIStyle(EditorStyles.numberField);
        boldNumberFieldStyle.font = EditorStyles.boldFont;

        GUIStyle boldToggleStyle = new GUIStyle(EditorStyles.toggle);
        boldToggleStyle.font = EditorStyles.boldFont;

        GUI.enabled = !waitTillPlistHasBeenWritten;

        //Toolbar
        EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
        {
            Rect optionsRect = GUILayoutUtility.GetRect(0, 20, GUILayout.ExpandWidth(false));

            if (GUILayout.Button(new GUIContent("Sort   " + (sortAscending ? "▼" : "▲"), "Change sorting to " + (sortAscending ? "descending" : "ascending")), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false)))
            {
                OnChangeSortModeClicked();
            }

            if (GUILayout.Button(new GUIContent("Options", "Contains additional functionality like \"Add new entry\" and \"Delete all entries\" "), EditorStyles.toolbarDropDown, GUILayout.ExpandWidth(false)))
            {
                GenericMenu options = new GenericMenu();
                options.AddItem(new GUIContent("New Entry..."), false, OnNewEntryClicked);
                options.AddSeparator("");
                options.AddItem(new GUIContent("Import..."), false, OnImport);
                options.AddItem(new GUIContent("Export Selected..."), false, OnExportSelected);
                options.AddItem(new GUIContent("Export All Entries"), false, OnExportAllClicked);
                options.AddSeparator("");
                options.AddItem(new GUIContent("Delete Selected Entries"), false, OnDeleteSelectedClicked);
                options.AddItem(new GUIContent("Delete All Entries"), false, OnDeleteAllClicked);
                options.DropDown(optionsRect);
            }

            GUILayout.Space(5);

            //Searchfield
            Rect position = GUILayoutUtility.GetRect(50, 250, 10, 50,EditorStyles.toolbarTextField);
            position.width -= 16;
            position.x += 16;
            SearchString = GUI.TextField(position, SearchString, EditorStyles.toolbarTextField);

            position.x = position.x - 18;
            position.width = 20;
            if (GUI.Button(position, "", ToolbarSeachTextFieldPopup))
            {
                GenericMenu options = new GenericMenu();
                options.AddItem(new GUIContent("All"), SearchFilter == SearchFilterType.All, OnSearchAllClicked);
                options.AddItem(new GUIContent("Key"), SearchFilter == SearchFilterType.Key, OnSearchKeyClicked);
                options.AddItem(new GUIContent("Value (Strings only)"), SearchFilter == SearchFilterType.Value , OnSearchValueClicked);
                options.DropDown(position);
            }

            position = GUILayoutUtility.GetRect(10, 10, ToolbarSeachCancelButton);
            position.x -= 5;
            if (GUI.Button(position, "", ToolbarSeachCancelButton))
            {
                SearchString = string.Empty;
            }

            GUILayout.FlexibleSpace();

            if (Application.platform == RuntimePlatform.WindowsEditor)
            {
                string refreshTooltip = "Should all entries be automaticly refreshed every " + UpdateIntervalInSeconds + " seconds?";
                autoRefresh = GUILayout.Toggle(autoRefresh, new GUIContent("Auto Refresh ", refreshTooltip), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false), GUILayout.MinWidth(75));
            }

            if (GUILayout.Button(new GUIContent(RefreshIcon, "Force a refresh, could take a few seconds."), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(false)))
            {
                RefreshKeys();
            }

            Rect r;
            if (Application.platform == RuntimePlatform.OSXEditor)
                r = GUILayoutUtility.GetRect(16, 16);
            else
                r = GUILayoutUtility.GetRect(9, 16);

            if (waitTillPlistHasBeenWritten)
            {
                Texture2D t = AssetDatabase.LoadAssetAtPath(IconsPath + "loader/" + (Mathf.FloorToInt(rotation % 12) + 1) + ".png", typeof(Texture2D)) as Texture2D;

                GUI.DrawTexture(new Rect(r.x + 3, r.y, 16, 16), t);
            }
        }
        EditorGUILayout.EndHorizontal();

        GUI.enabled = !waitTillPlistHasBeenWritten;

        if (showNewEntryBox)
        {
            GUILayout.BeginHorizontal(GUI.skin.box);
            {
                GUILayout.BeginVertical(GUILayout.ExpandWidth(true));
                {
                    newKey = EditorGUILayout.TextField("Key", newKey);

                    switch (selectedType)
                    {
                        default:
                        case ValueType.String:
                            newValueString = EditorGUILayout.TextField("Value", newValueString);
                            break;
                        case ValueType.Float:
                            newValueFloat = EditorGUILayout.FloatField("Value", newValueFloat);
                            break;
                        case ValueType.Integer:
                            newValueInt = EditorGUILayout.IntField("Value", newValueInt);
                            break;
                    }

                    selectedType = (ValueType)EditorGUILayout.EnumPopup("Type", selectedType);
                }
                GUILayout.EndVertical();

                GUILayout.BeginVertical(GUILayout.Width(1));
                {
                    GUILayout.BeginHorizontal();
                    {
                        GUILayout.FlexibleSpace();

                        if (GUILayout.Button(new GUIContent("X", "Close"), EditorStyles.boldLabel, GUILayout.ExpandWidth(false)))
                        {
                            showNewEntryBox = false;
                        }
                    }
                    GUILayout.EndHorizontal();

                    if (GUILayout.Button(new GUIContent(AddIcon, "Add a new key-value.")))
                    {
                        if (!string.IsNullOrEmpty(newKey))
                        {
                            switch (selectedType)
                            {
                                case ValueType.Integer:
                                    PlayerPrefs.SetInt(newKey, newValueInt);
                                    ppeList.Add(new PlayerPrefsEntry(newKey, newValueInt));
                                    break;
                                case ValueType.Float:
                                    PlayerPrefs.SetFloat(newKey, newValueFloat);
                                    ppeList.Add(new PlayerPrefsEntry(newKey, newValueFloat));
                                    break;
                                default:
                                case ValueType.String:
                                    PlayerPrefs.SetString(newKey, newValueString);
                                    ppeList.Add(new PlayerPrefsEntry(newKey, newValueString));
                                    break;
                            }
                            PlayerPrefs.Save();
                        }

                        newKey = newValueString = "";
                        newValueInt = 0;
                        newValueFloat = 0;
                        GUIUtility.keyboardControl = 0;	//move focus from textfield, else the text won't be cleared
                        showNewEntryBox = false;
                    }
                }
                GUILayout.EndVertical();
            }
            GUILayout.EndHorizontal();
        }

        GUILayout.Space(2);
        
        GUI.backgroundColor = Color.white;
        
        EditorGUI.indentLevel++;

        scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
        {
            EditorGUILayout.BeginVertical();
            {
                for (int i = 0; i < filteredPpeList.Count; i++)
                {
                    if (filteredPpeList[i].Value != null)
                    {
                        EditorGUILayout.BeginHorizontal();
                        {
                            filteredPpeList[i].IsSelected = GUILayout.Toggle(filteredPpeList[i].IsSelected, new GUIContent("", "Toggle selection."), filteredPpeList[i].HasChanged ? boldToggleStyle : EditorStyles.toggle, GUILayout.MaxWidth(20), GUILayout.MinWidth(20), GUILayout.ExpandWidth(false));
                            filteredPpeList[i].Key = GUILayout.TextField(filteredPpeList[i].Key, filteredPpeList[i].HasChanged ? boldNumberFieldStyle : EditorStyles.numberField, GUILayout.MaxWidth(125), GUILayout.MinWidth(40), GUILayout.ExpandWidth(true));

                            GUIStyle numberFieldStyle = filteredPpeList[i].HasChanged ? boldNumberFieldStyle : EditorStyles.numberField;

                            switch (filteredPpeList[i].Type)
                            {
                                default:
                                case ValueType.String:
                                    filteredPpeList[i].Value = EditorGUILayout.TextField("", (string)filteredPpeList[i].Value, numberFieldStyle, GUILayout.MinWidth(40));
                                    break;
                                case ValueType.Float:
                                    filteredPpeList[i].Value = EditorGUILayout.FloatField("", (float)filteredPpeList[i].Value, numberFieldStyle, GUILayout.MinWidth(40));
                                    break;
                                case ValueType.Integer:
                                    filteredPpeList[i].Value = EditorGUILayout.IntField("", (int)filteredPpeList[i].Value, numberFieldStyle, GUILayout.MinWidth(40));
                                    break;
                            }

                            GUILayout.Label(new GUIContent("?", filteredPpeList[i].Type.ToString()), GUILayout.ExpandWidth(false));

                            GUI.enabled = filteredPpeList[i].HasChanged && !waitTillPlistHasBeenWritten;
                            if (GUILayout.Button(new GUIContent(SaveIcon, "Save changes made to this value."), GUILayout.ExpandWidth(false)))
                            {
                                filteredPpeList[i].SaveChanges();
                            }

                            if (GUILayout.Button(new GUIContent(UndoIcon, "Discard changes made to this value."), GUILayout.ExpandWidth(false)))
                            {
                                filteredPpeList[i].RevertChanges();
                            }

                            GUI.enabled = !waitTillPlistHasBeenWritten;

                            if (GUILayout.Button(new GUIContent(DeleteIcon, "Delete this key-value."), GUILayout.ExpandWidth(false)))
                            {
                                PlayerPrefs.DeleteKey(filteredPpeList[i].Key);
                                ppeList.Remove(filteredPpeList[i]);
                                PlayerPrefs.Save();

                                UpdateFilteredList();
                                break;
                            }
                        }
                        EditorGUILayout.EndHorizontal();
                    }
                }
            }
            EditorGUILayout.EndVertical();
        }
        EditorGUILayout.EndScrollView();

        EditorGUI.indentLevel--;
    }
Пример #50
0
 /// <summary>
 /// Tests whether two specified arcs are not equal.
 /// </summary>
 /// <param name="left">A <see cref="Arc"/> instance.</param>
 /// <param name="right">A <see cref="Arc"/> instance.</param>
 /// <returns><see langword="true"/> if the two segments are not equal; otherwise, <see langword="false"/>.</returns>
 public static bool operator !=(Arc left, Arc right)
 {
     return(!ValueType.Equals(left, right));
 }
Пример #51
0
 public PlayerPrefsEntry(string key, float value)
 {
     this.key = key;
     this.value = value;
     this.Type = ValueType.Float;
 }
Пример #52
0
 /// <summary>
 /// Tests whether two specified spheres are not equal.
 /// </summary>
 /// <param name="a">The left-hand sphere.</param>
 /// <param name="b">The right-hand sphere.</param>
 /// <returns><see langword="true"/> if the two spheres are not equal; otherwise, <see langword="false"/>.</returns>
 public static bool operator!=(Sphere a, Sphere b)
 {
     return(!ValueType.Equals(a, b));
 }
Пример #53
0
        public void RetrieveValue()
        {
            Key = oldKey;

            if (PlayerPrefs.GetString(Key, UNIQUE_STRING) != UNIQUE_STRING)
            {
                Type = ValueType.String;
                value = PlayerPrefs.GetString(Key);
            }
            else if (PlayerPrefs.GetInt(Key, UNIQUE_INT) != UNIQUE_INT)
            {
                Type = ValueType.Integer;
                value = PlayerPrefs.GetInt(Key);
            }
            else if (PlayerPrefs.GetFloat(Key, UNIQUE_FLOAT) != UNIQUE_FLOAT)
            {
                Type = ValueType.Float;
                value = PlayerPrefs.GetFloat(Key);
            }

            oldKey = Key;

            //Don't mark the first set Value as changed
            HasChanged = false;
        }
Пример #54
0
        public static bool IsCheckAgainstNull(this BinaryExpressionSyntax expression, out ExpressionSyntax target, out ValueType valueType)
        {
            var kind = expression.Kind();

            if (kind == SyntaxKind.NotEqualsExpression || kind == SyntaxKind.EqualsExpression)
            {
                var leftKind  = expression.Left.Kind();
                var rightKind = expression.Right.Kind();
                if (leftKind == SyntaxKind.NullLiteralExpression && rightKind != SyntaxKind.NullLiteralExpression)
                {
                    target    = expression.Right;
                    valueType = kind == SyntaxKind.NotEqualsExpression ? ValueType.NotNull : ValueType.Null;
                    return(true);
                }
                if (rightKind == SyntaxKind.NullLiteralExpression)
                {
                    target    = expression.Left;
                    valueType = kind == SyntaxKind.NotEqualsExpression ? ValueType.NotNull : ValueType.Null;
                    return(true);
                }
            }
            target    = null;
            valueType = ValueType.MaybeNull;
            return(false);
        }
Пример #55
0
            public void VisitConditionalExpr(bool condition, object thenValue, object elseValue, ValueType expected)
            {
                var target = new TypeCheckingVisitor();

                var conditionExpression = new ConstantExpr(condition);
                var thenExpression = new ConstantExpr(thenValue);
                var elseExpression = new ConstantExpr(elseValue);

                var expr = new ConditionalExpr(conditionExpression, thenExpression, elseExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
Пример #56
0
 /// <summary>
 /// Checks if the two given circles are not equal.
 /// </summary>
 /// <param name="a">The first of two 2D circles to compare.</param>
 /// <param name="b">The second of two 2D circles to compare.</param>
 /// <returns><b>true</b> if the circles are not equal; otherwise, <b>false</b>.</returns>
 public static bool operator!=(Circle a, Circle b)
 {
     return(!ValueType.Equals(a, b));
 }
		public ulong BeginSequence(ValueType sequenceType)
		{
			var type = GetValueType();
			if (type == sequenceType)
			{
				Reader.ReadUInt64();
				return Reader.ReadUInt64();
			}
			throw new BindingException(sequenceType, type);
		}
Пример #58
0
 private static void Append(StreamWriter sw, ValueType arg)
 {
     sw.Write(arg);
     sw.Write(',');
 }
Пример #59
0
 private static bool BoxUnboxToQ(ValueType o)
 {
     return Helper.Compare((NestedStructGen<int>?)o, Helper.Create(default(NestedStructGen<int>)));
 }
Пример #60
0
 private static bool BoxUnboxToQ(ValueType o)
 {
     return(Helper.Compare((NotEmptyStructConstrainedGen <int>?)o, Helper.Create(default(NotEmptyStructConstrainedGen <int>))));
 }