Ejemplo n.º 1
0
 /// <summary>
 /// Returns a read-only linked list from the given enumeration.
 /// </summary>
 /// <param name="e">Collection to be copied over to the read-only list.</param>
 /// <returns>The new read-only list.</returns>
 public static LinkedList ReadOnly(IEnumerable e)
 {
     LinkedList ll = new LinkedList(e);
     ll.m_readOnly = true;
     return ll;
 }
Ejemplo n.º 2
0
 public ListEnumerator(LinkedList ll)
 {
     list    = ll;
     current = list.m_header;
     mods    = list.m_modCount;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// TODO: Documentation ProcessRosterItem
        /// </summary>
        /// <param name="ri"></param>
        private void ProcessRosterItem(Item ri)
        {
            bool remove = ri.Subscription == Subscription.remove;

            LinkedList nodelist = m_items[ri.JID.ToString()] as LinkedList;

            if (nodelist == null)
            {
                // First time through.
                if (!remove)
                {
                    nodelist = new LinkedList();
                    m_items.Add(ri.JID.ToString(), nodelist);
                }
            }
            else
            {
                // update to an existing item. remove all of them, and start over.
                foreach (ItemNode i in nodelist)
                    this.RemoveItemNode(i);

                nodelist.Clear();

                if (remove)
                    m_items.Remove(ri.JID.ToString());
            }

            if (remove)
                return;

            if (this.ExcludeRosterItem(ri))
                return;

            // add the new ones back
            Hashtable ghash = new Hashtable();
            Group[] groups = ri.GetGroups();

            foreach (Group g in groups)
            {
                if (String.IsNullOrEmpty(g.GroupName))
                    g.GroupName = this.Unfiled;
            }

            if (groups.Length == 0)
            {
                groups = new Group[] { new Group(ri.OwnerDocument) };
                groups[0].GroupName = this.Unfiled;
            }

            foreach (Group g in groups)
            {
                // might have the same group twice.
                if (ghash.Contains(g.GroupName))
                    continue;

                ghash.Add(g.GroupName, g);

                if (this.Client.SupportNestedGroups)
                {
                    IEnumerable<String> groupies = this.ConstructNestedGroupList(g.GroupName);
                    Boolean useContinue = false;

                    foreach (String groupie in groupies)
                    {
                        if (this.m_excludedGroups.ContainsKey(groupie))
                        {
                            useContinue = true;
                            break;
                        }
                    }

                    if (useContinue)
                        continue;
                }
                else
                {
                    if (this.m_excludedGroups.ContainsKey(g.GroupName))
                        continue;
                }

                ItemNode i = new ItemNode(ri);
                i.ChangePresence(m_pres[ri.JID]);
                nodelist.Add(i);

                GroupNode gn = this.AddGroupNode(g);
                gn.Nodes.Add(i);
            }
        }