public void AddStorage(StorageDescription storageDescription) { if (Storages.ContainsKey(storageDescription.Name)) { throw new ArgumentException($"Dublicate storage: {storageDescription.Name}"); } Storages.Add(storageDescription); }
private static void AddRegister(ArchitectureDescription architecture, ParseTreeNode parseTreeNode) { RegisterDescription reg = new RegisterDescription() { Name = parseTreeNode.ChildNodes[1].Token.ValueString }; List <ParseTreeNode> parts = parseTreeNode.ChildNodes[3].SeperatedList("view-parts", "view-part"); foreach (var part in parts) { string name = part.ChildNodes[0].Token.ValueString; IndexRange range = ReadIndexRange(part.ChildNodes[1]); if (architecture.ContainsStorage(name)) { StorageDescription storage = architecture.Storages[name]; StoragePartDescription stPart = new StoragePartDescription() { Storage = storage, StartBit = range.Start, EndBit = range.End }; if (range.Start < 0) { throw new IndexOutOfRangeException("View range must have positive indexes."); } else if (range.End > storage.Length) { throw new IndexOutOfRangeException("View is out of storage bounds."); } reg.Parts.Add(stPart); } else { throw new KeyNotFoundException($"Storage {name} not found in {architecture.Name}."); } } architecture.AddRegister(reg); }
private void SaveData(StorageDescription storage) { var newFileContent = JsonConvert.SerializeObject(storage); File.WriteAllText(_filePath, newFileContent); }