/// <summary> /// Mark all items in the object /// </summary> /// <param name="obj"></param> /// <returns>Return the size of memory that referenced by the object</returns> private int TraverseObject(DSObject obj) { int size = obj.MemorySize; foreach (var item in obj.Values) { if (item.IsReferenceType) size += RecursiveMark(item); } return size; }
private int AllocateInternal(int size, PrimitiveType type) { switch (type) { case PrimitiveType.kTypeArray: var dsArray = new DSArray(size, this); return(AddHeapElement(dsArray)); case PrimitiveType.kTypePointer: var dsObject = new DSObject(size, this); return(AddHeapElement(dsObject)); case PrimitiveType.kTypeString: var dsString = new DSString(size, this); return(AddHeapElement(dsString)); default: throw new ArgumentException("type"); } }
private int AllocateInternal(StackValue[] values, PrimitiveType type) { HeapElement hpe = null; switch (type) { case PrimitiveType.Array: hpe = new DSArray(values, this); break; case PrimitiveType.Pointer: hpe = new DSObject(values, this); break; case PrimitiveType.String: hpe = new DSString(values, this); break; default: throw new ArgumentException("type"); } return(AddHeapElement(hpe)); }
private int AllocateInternal(int size, PrimitiveType type) { HeapElement hpe = null; switch (type) { case PrimitiveType.kTypeArray: hpe = new DSArray(size, this); break; case PrimitiveType.kTypePointer: hpe = new DSObject(size, this); break; case PrimitiveType.kTypeString: hpe = new DSString(size, this); break; default: throw new ArgumentException("type"); } return AddHeapElement(hpe); }