示例#1
0
		void appendIn(utList<tListEntry> list, System.Object target, bool paused){
			tListEntry listEntry = new tListEntry ();
			listEntry.target = target;
			listEntry.paused = paused;
			listEntry.markedForDeletion = false;
			MethodInfo method = target.GetType ().GetMethod (updateSelector);
			listEntry.impMethod = (TICK_IMP) Delegate.CreateDelegate(typeof(TICK_IMP), target, method);
			
			utNode<tListEntry> listElement = new utNode<tListEntry> ();
			listElement.next = listElement.prev = null;
			listElement.obj = listEntry;

			list.DL_APPEND(listElement);
			
			tHashUpdateEntry hashElement = new tHashUpdateEntry ();
			hashElement.target = target;
			hashElement.list = list;
			hashElement.entry = listElement;
			hashForUpdates.HASH_ADD_INT (target.GetHashCode(), hashElement);
		}
示例#2
0
		void removeUpdatesFromHash(utNode<tListEntry> entry){
			tHashUpdateEntry element = hashForUpdates.HASH_FIND_INT (entry.obj.target.GetHashCode());
			if (element != null) {
				// list entry
				element.list.DL_DELETE(element.entry);	
				element.entry = null;
				
				// hash entry
				System.Object target = element.target;
				hashForUpdates.HASH_DEL(target.GetHashCode());
			}
		}
示例#3
0
		void priorityIn(utList<tListEntry> list, System.Object target, int priority, bool paused){
			tListEntry listEntry = new tListEntry ();
			listEntry.target = target;
			listEntry.priority = priority;
			listEntry.paused = paused;
			MethodInfo method = target.GetType ().GetMethod (updateSelector);
			listEntry.impMethod = (TICK_IMP) Delegate.CreateDelegate(typeof(TICK_IMP), target, method);
			listEntry.markedForDeletion = false;
			
			utNode<tListEntry> listElement = new utNode<tListEntry> ();
			listElement.next = listElement.prev = null;
			listElement.obj = listEntry;

			
			if (list.head == null) {
				list.DL_APPEND(listElement);
			} else {
				bool added = false;
				for( utNode<tListEntry> elem = list.head; elem != null ; elem = elem.next ) {
					if(priority < elem.obj.priority){
						
						if( elem == list.head )
							list.DL_PREPEND(listElement);
						else {
							listElement.next = elem;
							listElement.prev = elem.prev;
							
							elem.prev.next = listElement;
							elem.prev = listElement;
						}
						added = true;
						break;
					}
				}

				if(!added)
					list.DL_APPEND(listElement);
			}
			tHashUpdateEntry hashElement = new tHashUpdateEntry ();
			hashElement.target = target;
			hashElement.list = list;
			hashElement.entry = listElement;
			hashForUpdates.HASH_ADD_INT (target.GetHashCode(), hashElement);
		}