public void SetDouble(int index, double value) { VarData vVardata = VarData.zero; vVardata.nType = VarType.Double; vVardata.Data = value; m_Values[index] = vVardata; }
public void AddUserData(byte[] value) { VarData vVarData = VarData.zero; vVarData.nType = VarType.UserData; vVarData.Data = value.Clone(); m_Values.Add(vVarData); }
public void SetWideStr(int index, string value) { VarData vVardata = VarData.zero; vVardata.nType = VarType.WideStr; vVardata.Data = value; m_Values[index] = vVardata; }
public void SetObject(int index, ObjectID value) { VarData vVardata = VarData.zero; vVardata.nType = VarType.Object; vVardata.Data = value.Clone(); m_Values[index] = vVardata; }
public void SetFloat(int index, float value) { VarData vVardata = VarData.zero; vVardata.nType = VarType.Float; vVardata.Data = value; m_Values[index] = vVardata; }
public void AddFloat(float value) { VarData vVarData = VarData.zero; vVarData.nType = VarType.Float; vVarData.Data = value; m_Values.Add(new VarData(VarType.Float, value)); }
public void AddInt64(long value) { VarData vVarData = VarData.zero; vVarData.nType = VarType.Int64; vVarData.Data = value; m_Values.Add(new VarData(VarType.Int64, value)); }
public void AddBool(bool value) { VarData vVarData = VarData.zero; vVarData.nType = VarType.Bool; vVarData.Data = value; m_Values.Add(vVarData); }
public void AddInt(int value) { VarData vVarData = VarData.zero; vVarData.nType = VarType.Int; vVarData.Data = value; m_Values.Add(vVarData); }
public void AddString(string value) { VarData vVarData = VarData.zero; vVarData.nType = VarType.String; vVarData.Data = value; m_Values.Add(vVarData); }
public void SetUserData(int index, byte[] value) { VarData vVardata = VarData.zero; vVardata.nType = VarType.UserData; vVardata.Data = value.Clone(); m_Values[index] = vVardata; }
public void SetInt64(int index, long value) { VarData vVardata = VarData.zero; vVardata.nType = VarType.Int64; vVardata.Data = value; m_Values[index] = vVardata; }
public void AddDouble(double value) { VarData vVarData = VarData.zero; vVarData.nType = VarType.Double; vVarData.Data = value; m_Values.Add(vVarData); }
public void SetBool(int index, bool value) { VarData vVardata = VarData.zero; vVardata.nType = VarType.Bool; vVardata.Data = value; m_Values[index] = vVardata; }
public void AddWideStr(string value) { VarData vVarData = VarData.zero; vVarData.nType = VarType.WideStr; vVarData.Data = value; m_Values.Add(vVarData); }
public void AddObject(ObjectID value) { VarData vVarData = VarData.zero; vVarData.nType = VarType.Object; vVarData.Data = value; m_Values.Add(vVarData); }
public void AddBool(bool value) { VarData data = FreeAllocManager.GetInstance.GetVarBool(); data.nType = VarType.Bool; data.Data = value; m_Values.Add(data); }
public void AddWideStr(string value) { VarData data = FreeAllocManager.GetInstance.GetVarWString(); data.nType = VarType.WideStr; data.Data = value; m_Values.Add(data); }
public void AddFloat(float value) { VarData data = FreeAllocManager.GetInstance.GetVarFloat(); data.nType = VarType.Float; data.Data = value; m_Values.Add(data); }
public void AddUserData(byte[] value) { VarData data = FreeAllocManager.GetInstance.GetVarUserData(); data.nType = VarType.UserData; data.Data = value.Clone(); m_Values.Add(data); }
public void AddObject(ObjectID value) { VarData data = FreeAllocManager.GetInstance.GetVarObject(); data.nType = VarType.Object; data.Data = value.Clone(); m_Values.Add(data); }
public void AddInt64(long value) { VarData data = FreeAllocManager.GetInstance.GetVarInt64(); data.nType = VarType.Int64; data.Data = value; m_Values.Add(data); }
public void AddDouble(double value) { VarData data = FreeAllocManager.GetInstance.GetVarDouble(); data.nType = VarType.Double; data.Data = value; m_Values.Add(data); }
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; }
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); }
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); }
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; } }
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); }
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); }
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); }