private void initConfig() { itm = new BItem(); lItm = new List <BItem>(); itm.item_id = "item_id"; itm.item_code = "item_code"; itm.item_name_t = "item_name_t"; itm.item_name_e = "item_name_e"; itm.item_sub_group_id = "item_sub_group_id"; itm.item_common_name = "item_common_name"; itm.item_trade_name = "item_trade_name"; itm.item_nick_name = "item_nick_name"; itm.item_billing_subgroop_id = "item_billing_subgroop_id"; itm.item_secret = "item_secret"; itm.active = "active"; itm.remark = "remark"; itm.date_create = "date_create"; itm.date_modi = "date_modi"; itm.date_cancel = "date_cancel"; itm.user_create = "user_create"; itm.user_modi = "user_modi"; itm.user_cancel = "user_cancel"; itm.status_item = "status_item"; itm.item_master_id = "item_master_id"; itm.item_link_id = "item_link_id"; itm.table = "b_item"; itm.pkField = "item_id"; }
public void getlStf() { //lDept = new List<Position>(); lItm.Clear(); DataTable dt = new DataTable(); dt = selectAll(); foreach (DataRow row in dt.Rows) { BItem itm1 = new BItem(); itm1.item_id = row[itm.item_id].ToString(); itm1.item_code = row[itm.item_code].ToString(); itm1.item_name_t = row[itm.item_name_t].ToString(); itm1.item_name_e = row[itm.item_name_e].ToString(); itm1.item_sub_group_id = row[itm.item_sub_group_id].ToString(); itm1.item_common_name = row[itm.item_common_name].ToString(); itm1.item_trade_name = row[itm.item_trade_name].ToString(); itm1.item_nick_name = row[itm.item_nick_name].ToString(); itm1.item_billing_subgroop_id = row[itm.item_billing_subgroop_id].ToString(); itm1.item_secret = row[itm.item_secret].ToString(); itm1.active = row[itm.active].ToString(); itm1.remark = row[itm.remark].ToString(); itm1.date_create = row[itm.date_create].ToString(); itm1.date_modi = row[itm.date_modi].ToString(); itm1.date_cancel = row[itm.date_cancel].ToString(); itm1.user_create = row[itm.user_create].ToString(); itm1.user_modi = row[itm.user_modi].ToString(); //itm1.remark = row[itm.remark].ToString(); lItm.Add(itm1); } }
private static void InsertIntoExternal(BItem h, Item item) { int j; BNode t = new BNode() { Item = item, Key = item.Key }; for (j = 0; j < h.M; j++) { if (item.Key < h.B[j].Key) { break; } } int i = h.M; while (i > j) { h.B[i] = h.B[i - 1]; i--; } h.B[j] = t; h.M++; }
private void chkNull(BItem p) { long chk = 0; p.date_modi = p.date_modi == null ? "" : p.date_modi; p.date_cancel = p.date_cancel == null ? "" : p.date_cancel; p.user_create = p.user_create == null ? "" : p.user_create; p.user_modi = p.user_modi == null ? "" : p.user_modi; p.user_cancel = p.user_cancel == null ? "" : p.user_cancel; p.item_code = p.item_code == null ? "" : p.item_code; p.item_name_t = p.item_name_t == null ? "" : p.item_name_t; p.item_nick_name = p.item_nick_name == null ? "" : p.item_nick_name; p.item_secret = p.item_secret == null ? "" : p.item_secret; p.item_name_e = p.item_name_e == null ? "" : p.item_name_e; p.item_common_name = p.item_common_name == null ? "" : p.item_common_name; p.remark = p.remark == null ? "" : p.remark; p.item_trade_name = p.item_trade_name == null ? "" : p.item_trade_name; p.item_sub_group_id = long.TryParse(p.item_sub_group_id, out chk) ? chk.ToString() : "0"; p.item_billing_subgroop_id = long.TryParse(p.item_billing_subgroop_id, out chk) ? chk.ToString() : "0"; p.status_item = long.TryParse(p.status_item, out chk) ? chk.ToString() : "0"; p.item_master_id = long.TryParse(p.item_master_id, out chk) ? chk.ToString() : "0"; p.item_link_id = long.TryParse(p.item_link_id, out chk) ? chk.ToString() : "0"; }
/// <summary> /// Ищем элемент в B-дереве /// </summary> /// <param name="tree">обыскиваемое дерево</param> /// <param name="key">искомый ключ</param> /// <param name="ht">высота обыскиваемого дерева</param> private static Item SearchR(BItem tree, int key, int ht) { if (ht == 0) // обыскиваемое дерево - внешнее, ожидаем ссылок на элементы { // ищем прямым перебором for (int i = 0; i < tree.M; i++) { if (tree.B[i].Key == key) { return(tree.B[i].Item); } } // ищем бинарным поиском //return BinarySearch(tree, key, 0, tree.M-1); } else // обыскиваемое дерево - внутреннее, ожидаем ссылки на другие деревья в детях { for (int i = 0; i < tree.M; i++) { if (i + 1 == tree.M || // it's last subtree tree.B[i + 1].Key > key) // следующая секция содержит ключи больше искомого { return(SearchR(tree.B[i].Next, key, ht - 1)); } } } return(null); }
public BItem Get() { BItem item = new BItem(); switch (type) { case 1: item = new Weapon(); item._name = name; item.id = id; item.Number.Value = count; item.icon = Resources.Load <Sprite>(name); ((Weapon)item).OffensePower = val[0]; break; case 3: item = new Stuff(); item._name = name; item.id = id; item.Number.Value = count; item.icon = Resources.Load <Sprite>(name); ((Stuff)item).Hp = val[0]; break; default: break; } return(item); }
public void Sort(Comparison <KeyValuePair <int, BItem> > comparison) { KeyValuePair <int, BItem> [] sort = bag.Items.ToArray(); Array.Sort(sort, comparison); for (int i = 0; i < sort.Length; ++i) { BItem copy = sort[i].Value.Copy(); sort[i] = KeyValuePair.Create(i, copy); // old item IsManaged. need Copy a new one. } bag.Items.Clear(); bag.Items.AddRange(sort); // use AddRange for performence }
private static BItem Split(BItem h) { BItem t = new BItem(); for (int i = 0; i < Mmax / 2; i++) { t.B[i] = h.B[Mmax / 2 + i]; h.B[Mmax / 2 + i] = null; } h.M = Mmax / 2; t.M = Mmax / 2; return(t); }
private static Item BinarySearch(BItem tree, int key, int start, int end) { int km = (end + start) / 2; if (tree.B[km].Key == key) { return(tree.B[km].Item); } if (tree.B[km].Key > key) { return(BinarySearch(tree, key, start, km - 1)); } return(BinarySearch(tree, key, km + 1, end)); }
private static BItem InsertR(BItem h, Item item, int ht) { if (ht == 0) // вставляем во внешний узел { InsertIntoExternal(h, item); } else // вставляем во внутренний узел { InsertIntoInternal(h, item, ht); } if (h.M < Mmax) { return(null); } return(Split(h)); }
private static void InsertIntoInternal(BItem h, Item item, int ht) { int j; // we have to find a B element to insert item to for (j = 0; j < h.M; j++) { if (h.B[0].Key > item.Key) { h.B[0].Key = item.Key; j = 0; break; } if (h.B[j].Key > item.Key) { j--; break; } if (j == h.M - 1) { break; } // j=M-1 here } // j is what we need BItem u = InsertR(h.B[j].Next, item, ht - 1); if (u == null) { return; } BNode t = new BNode() { Key = u.B[0].Key, Next = u }; j++; int i = h.M; while (i > j && i - 1 > 0) { h.B[i] = h.B[i - 1]; i--; } h.B[j] = t; h.M++; }
public String insert(BItem p, String userId) { String re = ""; String sql = ""; p.active = "1"; //p.ssdata_id = ""; long chk = 0; chkNull(p); //lbReq.form_a_id = "form_a_id"; //p.req_code = genReqDoc(); sql = "Insert Into " + itm.table + " Set " + " " + itm.item_code + " = '" + p.item_code.Replace("'", "''") + "'" + "," + itm.item_name_t + "= '" + p.item_name_t.Replace("'", "''") + "'" + "," + itm.item_name_e + "= '" + p.item_name_e.Replace("'", "''") + "'" + "," + itm.item_sub_group_id + "= '" + p.item_sub_group_id + "'" + "," + itm.item_common_name + "= '" + p.item_common_name.Replace("'", "''") + "'" + "," + itm.item_trade_name + "= '" + p.item_trade_name.Replace("'", "''") + "'" + "," + itm.item_nick_name + "= '" + p.item_nick_name.Replace("'", "''") + "'" + "," + itm.item_billing_subgroop_id + "= '" + p.item_billing_subgroop_id + "'" + "," + itm.item_secret + "= '" + p.item_secret + "'" + "," + itm.active + "= '" + p.active + "'" + "," + itm.remark + "= '" + p.remark + "'" + "," + itm.date_create + "= now()" + "," + itm.user_create + "= '" + userId + "'" + "," + itm.status_item + "= '" + p.status_item + "'" + "," + itm.item_master_id + "= '" + p.item_master_id + "'" + "," + itm.item_link_id + "= '" + p.item_link_id + "'" + ""; try { re = conn.ExecuteNonQuery(conn.conn, sql); } catch (Exception ex) { sql = ex.Message + " " + ex.InnerException; } return(re); }
public void Insert(Item item) { BItem u = InsertR(root, item, Ht); n++; // увеличиваем счётчик узлов if (u == null) // разбиение корня не требуется { return; } // разбиваем корень BItem t = new BItem(); t.M = 2; // это будет новый корень, и у него будет только две активных ссылки // заполняем активные ссылки t.B[0] = new BNode { Next = root, Key = root.B[0].Key }; // берём первые ключи из поддеревьев чтоб указать на эти поддеревья t.B[1] = new BNode { Next = u, Key = u.B[0].Key }; root = t; Ht++; // увеличиваем счётчик высоты дерева }
/// <summary> /// 移动物品,从一个格子移动到另一个格子。实现功能:移动,交换,叠加,拆分。 /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <param name="number">-1 表示尽量移动所有的</param> public int Move(int from, int to, int number) { // validate parameter if (from < 0 || from >= bag.Capacity) { return(ModuleBag.ResultCodeFromInvalid); } if (to < 0 || to >= bag.Capacity) { return(ModuleBag.ResultCodeToInvalid); } BItem itemFrom; if (false == bag.Items.TryGetValue(from, out itemFrom)) { return(ModuleBag.ResultCodeFromNotExsit); } if (number < 0 || number > itemFrom.Number) { number = itemFrom.Number; // move all } int pileMax = GetItemPileMax(itemFrom.Id); if (bag.Items.TryGetValue(to, out var itemTo)) { if (itemFrom.Id != itemTo.Id) { if (number < itemFrom.Number) { // 试图拆分,但是目标已经存在不同物品 return(ModuleBag.ResultCodeTrySplitButTargetExsitDifferenceItem); } // 交换 BItem.Swap(itemFrom, itemTo); return(0); } // 叠加(或拆分) int numberToWill = itemTo.Number + number; if (numberToWill > pileMax) { itemTo.Number = pileMax; itemFrom.Number = numberToWill - pileMax; } else { itemTo.Number = numberToWill; bag.Items.Remove(from); } return(0); } // 移动(或拆分) BItem itemNew = itemFrom.Copy(); // 先复制一份再设置成目标数量。 itemNew.Number = number; if (itemFrom.Number == number) { // 移动 bag.Items.Remove(from); bag.Items.Add(to, itemNew); return(0); } // 拆分 itemFrom.Number -= number; bag.Items.Add(to, itemNew); return(0); }
public bool Eval(BItem element) { return(element is T { Deleted : false, Parent : null } && bounds.Contains(element.Location));
/// <summary> /// 加入物品:优先堆叠到已有的格子里面;然后如果很多,自动拆分。 /// 失败处理:如果外面调用者在失败时回滚事务,那么所有的添加都会被回滚。 /// 如果没有回滚,那么就会完成部分添加。此时返回剩余number,逻辑可能需要把剩余数量的物品转到其他系统(比如邮件中)。 /// 另外如果想回滚全部添加,但是又不回滚整个事务,应该使用嵌套事务。 /// 在嵌套事务中尝试添加,失败的话回滚嵌套事务,然后继续把所有物品转到其他系统。 /// </summary> /// <param name="item"></param> public int Add(int positionHint, BItem itemAdd) { if (itemAdd.Number <= 0) { throw new ArgumentException(); } int pileMax = GetItemPileMax(itemAdd.Id); // 优先加到提示格子 if (positionHint >= 0 && positionHint < bag.Capacity) { if (bag.Items.TryGetValue(positionHint, out var bItemHint)) { if (bItemHint.Id == itemAdd.Id) { int numberNew = bItemHint.Number + itemAdd.Number; if (numberNew <= pileMax) { bItemHint.Number = numberNew; return(0); // all pile done } bItemHint.Number = pileMax; itemAdd.Number = numberNew - pileMax; // continue to add } // continue to add } else { bag.Items.Add(positionHint, itemAdd); // in managed if (itemAdd.Number <= pileMax) { return(0); } int remain = itemAdd.Number - pileMax; itemAdd.Number = pileMax; itemAdd = itemAdd.Copy(); // current itemAdd has in mananged. itemAdd.Number = remain; // ready to continue add } } foreach (var item in bag.Items) { if (item.Value.Id == itemAdd.Id) { int numberNew = item.Value.Number + itemAdd.Number; if (numberNew > pileMax) { item.Value.Number = pileMax; itemAdd.Number = numberNew - pileMax; continue; } item.Value.Number = numberNew; return(0); // all pile done } } while (itemAdd.Number > pileMax) { int pos = GetEmptyPosition(); if (pos == -1) { return(itemAdd.Number); } BItem itemNew = itemAdd.Copy(); itemNew.Number = pileMax; itemAdd.Number -= pileMax; bag.Items.Add(pos, itemNew); } if (itemAdd.Number > 0) { int pos = GetEmptyPosition(); if (pos == -1) { return(itemAdd.Number); } bag.Items.Add(pos, itemAdd); } return(0); }
/// <summary> /// 移动物品,从一个格子移动到另一个格子。实现功能:移动,交换,叠加,拆分。 /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <param name="number">-1 表示尽量移动所有的</param> public void Move(int from, int to, int number) { BItem itemFrom; if (false == bag.Items.TryGetValue(from, out itemFrom)) { return; } // validate parameter if (from < 0 || from >= bag.Capacity) { return; } if (to < 0 || to >= bag.Capacity) { return; } if (number < 0 || number > itemFrom.Number) { number = itemFrom.Number; // move all } int pileMax = GetItemPileMax(itemFrom.Id); if (bag.Items.TryGetValue(to, out var itemTo)) { if (itemFrom.Id != itemTo.Id) { if (number < itemFrom.Number) { return; // 试图拆分,但是目标已经存在不同物品 } // 交换 BItem.Swap(itemFrom, itemTo); return; } // 叠加(或拆分) int numberToWill = itemTo.Number + number; if (numberToWill > pileMax) { itemTo.Number = pileMax; itemFrom.Number = numberToWill - pileMax; } else { itemTo.Number = numberToWill; bag.Items.Remove(from); } return; } // 移动(或拆分) BItem itemNew = itemFrom.Copy(); // 先复制一份再设置成目标数量。 itemNew.Number = number; if (itemFrom.Number == number) { // 移动 bag.Items.Remove(from); bag.Items.Add(to, itemNew); return; } // 拆分 itemFrom.Number -= number; bag.Items.Add(to, itemNew); }