Esempio n. 1
0
        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";
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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++;
        }
Esempio n. 4
0
        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";
        }
Esempio n. 5
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);
 }
Esempio n. 6
0
    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);
    }
Esempio n. 7
0
File: Bag.cs Progetto: e2wugui/zeze
 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
 }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
0
 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));
 }
Esempio n. 11
0
        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++;
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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++; // увеличиваем счётчик высоты дерева
        }
Esempio n. 14
0
File: Bag.cs Progetto: e2wugui/zeze
        /// <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);
        }
Esempio n. 15
0
 public bool Eval(BItem element)
 {
     return(element is T {
         Deleted : false, Parent : null
     } && bounds.Contains(element.Location));
Esempio n. 16
0
File: Bag.cs Progetto: e2wugui/zeze
        /// <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);
        }
Esempio n. 17
0
File: Bag.cs Progetto: e2wugui/zeze
        /// <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);
        }