private static void Delete(Tag tag) { ObjectMapEntry entry; objectMap.TryGetValue(tag, out entry); if (entry != null) { DeletedObjectQueue queue; objectMap.Remove(tag); classNameMap.Remove(tag); deletedObjectMap.TryGetValue(tag, out queue); if (queue == null) { queue = new DeletedObjectQueue(); deletedObjectMap[tag] = queue; } queue.Add(entry); entry.Obj.SetTag(Tag.Null); } else { DeletedObjectQueue queue2; deletedObjectMap.TryGetValue(tag, out queue2); if (queue2 != null) { ObjectMapEntry newest = queue2.Newest; newest.RemainingUndoOverDelete++; } } }
public void Add(ObjectMapEntry ome) { Element element = new Element(ome); if (this.head == null) { this.head = this.tail = element; } else { element.previous = this.tail; this.tail.next = element; this.tail = element; } this.count++; }
private static void TagHandler(TagEventType eventType, Tag tag) { switch (eventType) { case TagEventType.TAG_EVENT_UNDO_OVER_CREATE: ObjectMapEntry entry2; objectMap.TryGetValue(tag, out entry2); if (entry2 != null) { objectMap.Remove(tag); entry2.Obj.SetTag(Tag.Null); } break; case TagEventType.TAG_EVENT_NORMAL_DELETE: Delete(tag); return; case TagEventType.TAG_EVENT_UNDO_OVER_DELETE: { ObjectMapEntry entry; DeletedObjectQueue queue; objectMap.TryGetValue(tag, out entry); if (entry != null) { throw new ApplicationException("Unexpected map entry for: " + tag); } deletedObjectMap.TryGetValue(tag, out queue); if (queue == null) { break; } if (queue.Newest.RemainingUndoOverDelete == 0) { objectMap[tag] = queue.Newest; queue.Newest.Obj.SetTag(tag); queue.RemoveNewest(); if (queue.Count == 0) { deletedObjectMap.Remove(tag); return; } break; } ObjectMapEntry newest = queue.Newest; newest.RemainingUndoOverDelete--; return; } case TagEventType.TAG_EVENT_UNDO_DELETE_EXPIRED: DeletedObjectQueue queue2; deletedObjectMap.TryGetValue(tag, out queue2); if (queue2 == null) { break; } queue2.RemoveOldest(); if (queue2.Count != 0) { break; } deletedObjectMap.Remove(tag); return; case TagEventType.TAG_EVENT_UNDO_CREATE_EXPIRED: case TagEventType.TAG_EVENT_BEFORE_REPLACE: case TagEventType.TAG_EVENT_AFTER_REPLACE: break; case TagEventType.TAG_EVENT_UNDO_DELETE_DISCARDED: DeletedObjectQueue queue3; deletedObjectMap.TryGetValue(tag, out queue3); if (queue3 == null) { break; } if (queue3.Newest.RemainingUndoOverDelete != 0) { ObjectMapEntry entry3 = queue3.Newest; entry3.RemainingUndoOverDelete--; return; } queue3.RemoveNewest(); if (queue3.Count != 0) { break; } deletedObjectMap.Remove(tag); return; default: return; } }
public static TaggedObject Get(Tag objectTag, string name) { ObjectMapEntry entry; string str; string str2; Type type; RegisterTagEventHandler(); if (objectTag == Tag.Null) { return(null); } objectMap.TryGetValue(objectTag, out entry); classNameMap.TryGetValue(objectTag, out str); if (name != null) { str2 = name; } else { int error = 0; IntPtr s = JAM_ask_object_class_name_managed(objectTag, ref error); if (error != 0) { throw new Exception(string.Concat(new object[] { "Could not get class name for tag: ", objectTag, ", error: ", error })); } str2 = JAM.ToStringFromLocale(s); } if ((entry != null) && (str2 != str)) { Delete(objectTag); entry = null; } if (entry != null) { return(entry.Obj); } classMap.TryGetValue(str2, out type); if (type == null) { type = FindTypeForClass(str2, typeof(TaggedObject)); } if (type == null) { throw new Exception(string.Concat(new object[] { "No automation class for tag: ", objectTag, ", class: ", str2 })); } ConstructorInfo info = type.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null); if (info == null) { throw new Exception("No constructor found for: " + type); } TaggedObject obj2 = (TaggedObject)info.Invoke(null); MethodInfo info2 = type.GetMethod("initialize", BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null); if (info2 != null) { info2.Invoke(obj2, null); } ObjectMapEntry entry2 = new ObjectMapEntry(obj2, str2); objectMap[objectTag] = entry2; classNameMap[objectTag] = str2; obj2.SetTag(objectTag); return(obj2); }
public Element(ObjectMapEntry ome) { this.element = ome; }