public void Allocate() { if (SymbolTable.MemFree < size_) { throw new Exception( string.Format("Insufficient memory to allocate the array \"{0}\"!", name_)); } for (int i = 0; i < size_; i++) { string elementName = string.Format("{0}[{1}]", name_, i); SymbolTable.Add(elementName); SymbolTable.Set(elementName, null); } }
public SILArray(string name, params ISILObject[] elements) { if (elements.Length > 8192) { throw new Exception("Array is too big, must be 8192 elements or less!"); } // allocate space for the strings name_ = name; // deep copy foreach (ISILObject e in elements) { string elementName = string.Format("{0}[{1}]", name_, size_++); SymbolTable.Add(elementName); SymbolTable.Set(elementName, (SILInteger)e.Value); } }
// allow array-like access public ISILObject this[int index] { get { if (index < 0 || index >= size_) { throw new Exception("Index out of bounds!"); } string elementName = string.Format("{0}[{1}]", name_, index); return(SymbolTable.Get(elementName)); } set { if (index < 0 || index >= size_) { throw new Exception("Index out of bounds!"); } string elementName = string.Format("{0}[{1}]", name_, index); SymbolTable.Set(elementName, (SILInteger)value); } }