Beispiel #1
0
        public void SetDouble(int index, double value)
        {
            VarData vVardata = VarData.zero;

            vVardata.nType  = VarType.Double;
            vVardata.Data   = value;
            m_Values[index] = vVardata;
        }
Beispiel #2
0
        public void AddUserData(byte[] value)
        {
            VarData vVarData = VarData.zero;

            vVarData.nType = VarType.UserData;
            vVarData.Data  = value.Clone();
            m_Values.Add(vVarData);
        }
Beispiel #3
0
        public void SetWideStr(int index, string value)
        {
            VarData vVardata = VarData.zero;

            vVardata.nType  = VarType.WideStr;
            vVardata.Data   = value;
            m_Values[index] = vVardata;
        }
Beispiel #4
0
        public void SetObject(int index, ObjectID value)
        {
            VarData vVardata = VarData.zero;

            vVardata.nType  = VarType.Object;
            vVardata.Data   = value.Clone();
            m_Values[index] = vVardata;
        }
Beispiel #5
0
        public void SetFloat(int index, float value)
        {
            VarData vVardata = VarData.zero;

            vVardata.nType  = VarType.Float;
            vVardata.Data   = value;
            m_Values[index] = vVardata;
        }
Beispiel #6
0
        public void AddFloat(float value)
        {
            VarData vVarData = VarData.zero;

            vVarData.nType = VarType.Float;
            vVarData.Data  = value;
            m_Values.Add(new VarData(VarType.Float, value));
        }
Beispiel #7
0
        public void AddInt64(long value)
        {
            VarData vVarData = VarData.zero;

            vVarData.nType = VarType.Int64;
            vVarData.Data  = value;
            m_Values.Add(new VarData(VarType.Int64, value));
        }
Beispiel #8
0
        public void AddBool(bool value)
        {
            VarData vVarData = VarData.zero;

            vVarData.nType = VarType.Bool;
            vVarData.Data  = value;
            m_Values.Add(vVarData);
        }
Beispiel #9
0
        public void AddInt(int value)
        {
            VarData vVarData = VarData.zero;

            vVarData.nType = VarType.Int;
            vVarData.Data  = value;
            m_Values.Add(vVarData);
        }
Beispiel #10
0
        public void AddString(string value)
        {
            VarData vVarData = VarData.zero;

            vVarData.nType = VarType.String;
            vVarData.Data  = value;
            m_Values.Add(vVarData);
        }
Beispiel #11
0
        public void SetUserData(int index, byte[] value)
        {
            VarData vVardata = VarData.zero;

            vVardata.nType  = VarType.UserData;
            vVardata.Data   = value.Clone();
            m_Values[index] = vVardata;
        }
Beispiel #12
0
        public void SetInt64(int index, long value)
        {
            VarData vVardata = VarData.zero;

            vVardata.nType  = VarType.Int64;
            vVardata.Data   = value;
            m_Values[index] = vVardata;
        }
Beispiel #13
0
        public void AddDouble(double value)
        {
            VarData vVarData = VarData.zero;

            vVarData.nType = VarType.Double;
            vVarData.Data  = value;
            m_Values.Add(vVarData);
        }
Beispiel #14
0
        public void SetBool(int index, bool value)
        {
            VarData vVardata = VarData.zero;

            vVardata.nType  = VarType.Bool;
            vVardata.Data   = value;
            m_Values[index] = vVardata;
        }
Beispiel #15
0
        public void AddWideStr(string value)
        {
            VarData vVarData = VarData.zero;

            vVarData.nType = VarType.WideStr;
            vVarData.Data  = value;
            m_Values.Add(vVarData);
        }
Beispiel #16
0
        public void AddObject(ObjectID value)
        {
            VarData vVarData = VarData.zero;

            vVarData.nType = VarType.Object;
            vVarData.Data  = value;
            m_Values.Add(vVarData);
        }
Beispiel #17
0
        public void AddBool(bool value)
        {
            VarData data = FreeAllocManager.GetInstance.GetVarBool();

            data.nType = VarType.Bool;
            data.Data  = value;

            m_Values.Add(data);
        }
Beispiel #18
0
        public void AddWideStr(string value)
        {
            VarData data = FreeAllocManager.GetInstance.GetVarWString();

            data.nType = VarType.WideStr;
            data.Data  = value;

            m_Values.Add(data);
        }
Beispiel #19
0
        public void AddFloat(float value)
        {
            VarData data = FreeAllocManager.GetInstance.GetVarFloat();

            data.nType = VarType.Float;
            data.Data  = value;

            m_Values.Add(data);
        }
Beispiel #20
0
        public void AddUserData(byte[] value)
        {
            VarData data = FreeAllocManager.GetInstance.GetVarUserData();

            data.nType = VarType.UserData;
            data.Data  = value.Clone();

            m_Values.Add(data);
        }
Beispiel #21
0
        public void AddObject(ObjectID value)
        {
            VarData data = FreeAllocManager.GetInstance.GetVarObject();

            data.nType = VarType.Object;
            data.Data  = value.Clone();

            m_Values.Add(data);
        }
Beispiel #22
0
        public void AddInt64(long value)
        {
            VarData data = FreeAllocManager.GetInstance.GetVarInt64();

            data.nType = VarType.Int64;
            data.Data  = value;

            m_Values.Add(data);
        }
Beispiel #23
0
        public void AddDouble(double value)
        {
            VarData data = FreeAllocManager.GetInstance.GetVarDouble();

            data.nType = VarType.Double;
            data.Data  = value;

            m_Values.Add(data);
        }
Beispiel #24
0
 public Variable(string sName = "DefaultVarName", string sHelp = NO_HELP, VarData eData = VarData.BOOL, VarType eType = VarType.None, object oData = null)
 {
     Name     = sName;
     Help     = sHelp;
     DataType = eData;
     Type     = eType;
     Dirty    = true;
     Data     = oData;
     InitData = Data;
 }
Beispiel #25
0
        public void AddUserData(byte[] value, int start, int size)
        {
            byte[] bytes = new byte[size];

            Array.Copy(value, start, bytes, 0, size);
            VarData vVarData = VarData.zero;

            vVarData.nType = VarType.UserData;
            vVarData.Data  = bytes;
            m_Values.Add(vVarData);
        }
 public void CreateOrUpdateVarData(VarData newData)
 {
     foreach (VarData data in variables)
     {
         if (data.name == newData.name)
         {
             data.type  = newData.type;
             data.value = newData.value;
             return;
         }
     }
     variables.Add(newData);
 }
Beispiel #27
0
		private static Hashtable BuildEnumerations(UPnPStateVariable[] SV)
		{
			Hashtable h = new Hashtable();
			Hashtable hlist = new Hashtable();
			EnumStruct d;
			VarData vd;
			string t;
	
			foreach(UPnPStateVariable V in SV)
			{
				if(V.AllowedStringValues!=null)
				{
					vd = new VarData();
					vd.VariableName = V.Name;
					vd.Enumerations = new ArrayList();
					hlist.Add(V.Name,vd);
					h.Clear();

					foreach(string val in V.AllowedStringValues)
					{
						t = val.ToUpper();
						t = t.Replace("-","_");
						t = t.Replace("+","_");
						t = t.Replace(" ","_");
						t = t.Replace(":","_");
						if(IsNumeric(t[0])==true)
						{
							t = "_" + t;
						}

						if(h.ContainsKey(t)==true)
						{
							t = val.ToUpper();
							t = t.Replace("-","_minus_");
							t = t.Replace("+","_plus_");
							t = t.Replace(" ","_");
							t = t.Replace(":","_colon_");
						}
						h.Add(t,t);
						d = new EnumStruct();
						d.EnumName = t;
						d.EnumValue = val;
						((VarData)hlist[V.Name]).Enumerations.Add(d);
					}
				}
			}
			return(hlist);
		}
Beispiel #28
0
        public Bean(Document doc, XmlElement self)
        {
            this.Self     = self;
            this.Document = doc;

            this.DefineFullName = self.GetAttribute("DefineFullName");

            XmlNodeList childNodes = self.ChildNodes;

            foreach (XmlNode node in childNodes)
            {
                if (XmlNodeType.Element != node.NodeType)
                {
                    continue;
                }
                XmlElement e   = (XmlElement)node;
                VarData    var = new VarData(this, e);
                VariableMap[var.Name] = var;
            }
        }
Beispiel #29
0
            public VarData Clone()
            {
                VarData newData = new VarData(nType, null);

                switch (nType)
                {
                case VarType.Object:
                    newData.Data = ((ObjectID)Data).Clone();
                    break;

                case VarType.UserData:
                    newData.Data = ((byte[])Data).Clone();
                    break;

                default:
                    newData.Data = Data;
                    break;
                }

                return(newData);
            }
Beispiel #30
0
        public bool Update(GridData grid, GridData.Row row, ref int colIndex, int pathIndex, UpdateParam param)
        {
            // ColumnCount maybe change in loop
            for (; colIndex < grid.ColumnCount; ++colIndex)
            {
                ColumnTag tag = grid.GetColumn(colIndex).ColumnTag;
                switch (tag.Tag)
                {
                case ColumnTag.ETag.AddVariable:
                    // end of bean.
                    // 删除Define变化时没有同步的数据。
                    HashSet <string> removed = new HashSet <string>();
                    foreach (var k in VariableMap.Keys)
                    {
                        if (tag.PathLast.Define.Parent.GetVariable(k) == null)
                        {
                            removed.Add(k);
                        }
                    }
                    foreach (var k in removed)
                    {
                        DeleteVarData(k);
                    }
                    return(false);
                }
                ColumnTag.VarInfo varInfo = tag.Path[pathIndex];
                if (false == VariableMap.TryGetValue(varInfo.Define.Name, out var varData))
                {
                    switch (param.UpdateType)
                    {
                    case EUpdate.Data:
                        break;     // will new data

                    case EUpdate.CallAction:
                    case EUpdate.Grid:
                        if (varInfo.Define.Type == VarDefine.EType.List)
                        {
                            if (tag.Tag == ColumnTag.ETag.ListStart)
                            {
                                ++colIndex;
                            }
                            colIndex = GridData.FindColumnListEnd(grid, colIndex);
                        }
                        continue;     // data not found. continue load.

                    case EUpdate.DeleteData:
                        return(true);    // data not found. nothing need to delete.

                    default:
                        throw new Exception("unknown update type");
                    }
                    varData = new VarData(this, varInfo.Define.Name);
                    VariableMap.Add(varInfo.Define.Name, varData);
                }
                else if (param.UpdateType == EUpdate.CallAction)
                {
                    param.UpdateAction(grid, colIndex, varInfo, varData);
                }

                if (varInfo.Define.Type == VarDefine.EType.List)
                {
                    if (param.UpdateType == EUpdate.DeleteData)
                    {
                        if (pathIndex + 1 < tag.Path.Count)
                        {
                            if (varInfo.ListIndex < varData.Beans.Count)
                            {
                                Bean bean1 = varData.Beans[varInfo.ListIndex];
                                if (null != bean1)
                                {
                                    bean1.Update(grid, row, ref colIndex, pathIndex + 1, param);
                                }
                                // always return true;
                            }
                        }
                        else
                        {
                            if (ColumnTag.ETag.ListStart != tag.Tag)
                            {
                                throw new Exception("应该仅在Tag为ListStart时移除数据. see FormMain.deleteVariable...");
                            }
                            DeleteVarData(varInfo.Define.Name);
                        }
                        return(true);
                    }
                    if (ColumnTag.ETag.ListStart == tag.Tag)
                    {
                        continue; // 此时没有进入下一级Bean,就在当前Bean再次判断,因为这里没有ListIndex。
                    }
                    if (tag.Tag == ColumnTag.ETag.ListEnd)
                    {
                        int curListCount = -varInfo.ListIndex;
                        int add          = 0;
                        for (int i = curListCount; i < varData.Beans.Count; ++i)
                        {
                            ColumnTag tagSeed = tag.Copy(ColumnTag.ETag.Normal);
                            tagSeed.PathLast.ListIndex = i;
                            add += tag.PathLast.Define.Reference.BuildGridColumns(grid, colIndex + add, tagSeed, -1);
                        }
                        if (curListCount < varData.Beans.Count) // curListCount 至少为1.
                        {
                            varInfo.ListIndex = -varData.Beans.Count;
                        }
                        if (add > 0)
                        {
                            --colIndex; // 新增加了列,回退一列,继续装载数据。
                        }
                        continue;
                    }

                    if (varInfo.ListIndex >= varData.Beans.Count)
                    {
                        if (EUpdate.Data == param.UpdateType)
                        {
                            for (int i = varData.Beans.Count; i < varInfo.ListIndex; ++i)
                            {
                                varData.AddBean(new Bean(Document, varInfo.Define.Value));
                            }
                            Bean create = new Bean(Document, varInfo.Define.Value);
                            varData.AddBean(create);
                            if (create.Update(grid, row, ref colIndex, pathIndex + 1, param))
                            {
                                return(true);
                            }
                        }
                        // 忽略剩下的没有数据的item直到ListEnd。
                        colIndex = GridData.FindColumnListEnd(grid, colIndex);
                        continue;
                    }

                    Bean bean = varData.Beans[varInfo.ListIndex];
                    if (null != bean)
                    {
                        if (bean.Update(grid, row, ref colIndex, pathIndex + 1, param))
                        {
                            return(true);
                        }
                        continue;
                    }
                    if (EUpdate.Data == param.UpdateType)
                    {
                        Bean create = new Bean(Document, varInfo.Define.Value);
                        varData.SetBeanAt(varInfo.ListIndex, create);
                        if (create.Update(grid, row, ref colIndex, pathIndex + 1, param))
                        {
                            return(true);
                        }
                    }
                    continue;
                }

                if (pathIndex + 1 != tag.Path.Count)
                {
                    throw new Exception("Remain Path, But Is Not A List");
                }

                switch (param.UpdateType)
                {
                case EUpdate.Data:
                    // OnGridCellEndEdit update data
                    varData.Value = row.Cells[colIndex].Value;
                    return(true);

                case EUpdate.CallAction:
                    // 上面已经做完了。
                    break;

                case EUpdate.Grid:
                    row.Cells[colIndex].Value = varData.Value; // upate to grid
                    break;                                     // Update Grid 等到 ColumnTag.ETag.AddVariable 才返回。在这个函数开头。

                case EUpdate.DeleteData:
                    DeleteVarData(varInfo.Define.Name);
                    return(true);

                default:
                    throw new Exception("unkown update type. end.");
                }
            }
            return(true);
        }
Beispiel #31
0
        protected override int ExecInternal()
        {
            // TODO 動作確認
            var     new_var1 = new VarData();
            var     new_var2 = new VarData();
            VarData old_var1;
            VarData old_var2;

            if (ArgNum != 3)
            {
                throw new EventErrorException(this, "Swapコマンドの引数の数が違います");
            }
            else
            {
                // 入れ替える前の変数の値を保存
                // 引数1の変数
                old_var1 = Expression.GetVariableObject(GetArg(2));
                if (old_var1 is object)
                {
                    new_var2.SetFrom(old_var1);
                }
                // 引数2の変数
                old_var2 = Expression.GetVariableObject(GetArg(3));
                if (old_var2 is object)
                {
                    new_var1.SetFrom(old_var2);
                }

                // 引数2の変数を引数1の変数に代入
                {
                    // 引数1がサブルーチンローカル変数の場合
                    if (Event.CallDepth > 0)
                    {
                        var loopTo = Event.VarIndex;
                        for (var i = (Event.VarIndexStack[Event.CallDepth - 1] + 1); i <= loopTo; i++)
                        {
                            if ((old_var1.Name ?? "") == (Event.VarStack[i].Name ?? ""))
                            {
                                Event.VarStack[i].SetFrom(new_var1);
                                goto Swap_Var2toVar1_End;
                            }
                        }
                    }

                    // ローカル・またはグローバル変数の場合
                    old_var1.SetFrom(new_var1);
                }

Swap_Var2toVar1_End:
                ;

                // 引数1の変数を引数2の変数に代入
                {
                    // 引数2がサブルーチンローカル変数の場合
                    if (Event.CallDepth > 0)
                    {
                        var loopTo1 = Event.VarIndex;
                        for (var i = (Event.VarIndexStack[Event.CallDepth - 1] + 1); i <= loopTo1; i++)
                        {
                            if ((old_var2.Name ?? "") == (Event.VarStack[i].Name ?? ""))
                            {
                                Event.VarStack[i].SetFrom(new_var2);
                                goto Swap_Var1toVar2_End;
                            }
                        }
                    }

                    // ローカル・またはグローバル変数の場合
                    old_var2.SetFrom(new_var2);
                }

Swap_Var1toVar2_End:
                ;
            }

            return(EventData.NextID);
        }