📄 librarybackup.java
字号:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: LibraryBackup.java * Written by: Dmitry Nadezhin, Sun Microsystems. * * Copyright (c) 2005 Sun Microsystems and Static Free Software * * Electric(tm) is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Electric(tm) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Electric(tm); see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, Mass 02111-1307, USA. */package com.sun.electric.database;import com.sun.electric.database.id.IdReader;import com.sun.electric.database.id.IdWriter;import com.sun.electric.database.id.LibId;import com.sun.electric.database.text.ImmutableArrayList;import java.io.IOException;/** * */public class LibraryBackup { public static final LibraryBackup[] NULL_ARRAY = {}; public static final ImmutableArrayList<LibraryBackup> EMPTY_LIST = new ImmutableArrayList<LibraryBackup>(NULL_ARRAY); /** Library persistent data. */ public final ImmutableLibrary d; /** True if library needs saving to disk. */ public final boolean modified; /** Array of referenced libs */ public final LibId[] referencedLibs; /** Creates a new instance of LibraryBackup */ public LibraryBackup(ImmutableLibrary d, boolean modified, LibId[] referencedLibs) { this.d = d; this.modified = modified; this.referencedLibs = referencedLibs; } /** * Returns LibraryBackup which differs from this LibraryBackup by "modified" flag set. * @return LibraryBackup with "modified" flag set. */ LibraryBackup withModified() { if (modified) return this; return new LibraryBackup(d, true, referencedLibs); } /** * Returns LibraryBackup which differs from this LibraryBackup by renamed Ids. * @param idMapper a map from old Ids to new Ids. * @return LibraryBackup with renamed Ids. */ LibraryBackup withRenamedIds(IdMapper idMapper) { ImmutableLibrary d = this.d.withRenamedIds(idMapper); LibId[] referencedLibs = null; for (int i = 0; i < this.referencedLibs.length; i++) { LibId oldLibId = this.referencedLibs[i]; LibId newLibId = idMapper.get(oldLibId); if (newLibId != oldLibId && referencedLibs == null) { referencedLibs = new LibId[this.referencedLibs.length]; System.arraycopy(this.referencedLibs, 0, referencedLibs, 0, referencedLibs.length); } if (referencedLibs != null) referencedLibs[i] = newLibId; } if (referencedLibs == null) referencedLibs = this.referencedLibs; if (this.d == d && this.referencedLibs == referencedLibs) return this; LibraryBackup newBackup = new LibraryBackup(d, true, referencedLibs); newBackup.check(); return newBackup; } /** * Writes this LibraryBackup to IdWriter. * @param writer where to write. */ void write(IdWriter writer) throws IOException { d.write(writer); writer.writeBoolean(modified); writer.writeInt(referencedLibs.length); for (int i = 0; i < referencedLibs.length; i++) writer.writeLibId(referencedLibs[i]); } /** * Reads LibraryBackup from SnapshotReader. * @param reader where to read. */ static LibraryBackup read(IdReader reader) throws IOException { ImmutableLibrary d = ImmutableLibrary.read(reader); boolean modified = reader.readBoolean(); int refsLength = reader.readInt(); LibId[] refs = new LibId[refsLength]; for (int i = 0; i < refsLength; i++) refs[i] = reader.readLibId(); return new LibraryBackup(d, modified, refs); } /** * Checks invariant of this CellBackup. * @throws AssertionError if invariant is broken. */ public void check() { d.check(); for (LibId libId: referencedLibs) assert libId != null; } @Override public String toString() { return d.toString(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -