/* PseudoCode Interpreted Language (PCIL): Part of the algoviz@vt collection of algorithm visualizations. Copyright (C) 2008 Brandon Malone, Frank Hadlock This file is part of the PseudoCode Interpreted Language. PseudoCode Interpreted Language 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. PseudoCode Interpreted Language 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 PseudoCode Interpreted Language. If not, see . */ /* * PrimitiveFactory.java * * Created on February 5, 2008, 12:02 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package dynamicmvc; import java.util.ArrayList; import java.util.HashMap; /** * * @author Brandon */ public class PrimitiveFactory { /** Creates a new instance of PrimitiveFactory */ public PrimitiveFactory() { } public static ArrayList memory; public static PrimitivePointer deepCopy(PrimitivePointer p, HashMap alreadyCopiedAddresses) throws DynamicMVCException { Primitive pr = p.dereference().deepCopy(alreadyCopiedAddresses); PrimitivePointer pointer = pr.getPointer(); pointer.setName(p.getName()); //memory.add(pr); return pointer; } public static void clearMemory() { memory = new ArrayList(); PrimitivePointer.currentID = -1; } public static void clearUpdateNames() { for(Primitive p : memory) { p.setUpdateVariableName(""); } } public static PrimitivePointer create(String declaration) { if (memory == null) { memory = new ArrayList(); } String[] split = declaration.split(" "); String primitiveType = split[0]; String name = split[1]; return create(primitiveType, name); } public static void setInMemory(int memoryAddress, Primitive p) { while(memory.size() < memoryAddress) { memory.add(null); } memory.set(memoryAddress, p); } public static Primitive getFromMemory(int memoryAddress) { return memory.get(memoryAddress); } public static PrimitivePointer create(String primitiveType, String name, int memoryAddress) { PrimitivePointer p = create(primitiveType, name); while(memory.size() < memoryAddress) { memory.add(null); } memory.set(memoryAddress, p.dereference()); memory.set(p.getAddress(), null); p.setAddress(memoryAddress); return p; } public static PrimitivePointer create(String primitiveType, String name) { if (memory == null) { memory = new ArrayList(); } Primitive p = createInMemory(primitiveType, name); PrimitivePointer pointer = new PrimitivePointer(memory.size(), name); memory.add(p); return pointer; } private static Primitive createInMemory(String primitiveType, String name) { Primitive p = null; if(primitiveType.equals(PrimitiveInteger.pseudocodeTypeName())) { p = new PrimitiveInteger(); } else if (primitiveType.equals(PrimitiveString.pseudocodeTypeName())) { p = new PrimitiveString(); } else if (primitiveType.equals(PrimitiveBoolean.pseudocodeTypeName())) { p = new PrimitiveBoolean(); } else if (primitiveType.equals(PrimitiveList.pseudocodeTypeName())) { p = new PrimitiveList(); } else if (primitiveType.equals(PrimitiveGraph.pseudocodeTypeName())) { p = new PrimitiveGraph(); } else if (primitiveType.equals(PrimitiveVertex.pseudocodeTypeName())) { p = new PrimitiveVertex(); } else if (primitiveType.equals(PrimitiveEdge.pseudocodeTypeName())) { p = new PrimitiveEdge(); } else if (primitiveType.equals(PrimitivePriorityQueue.pseudocodeTypeName())) { p = new PrimitivePriorityQueue(); } else if (primitiveType.equals(PrimitivePriorityQueueElement.pseudocodeTypeName())) { p = new PrimitivePriorityQueueElement(); } else if (primitiveType.equals(PrimitiveStructure.pseudocodeTypeName())) { p = new PrimitiveStructure(); } else if (primitiveType.equals(PrimitiveNull.pseudocodeTypeName())) { p = new PrimitiveNull(); } else if (primitiveType.equals(PrimitiveDirectedGraph.pseudocodeTypeName())) { p = new PrimitiveDirectedGraph(); } else if (primitiveType.equals(PrimitiveDictionary.pseudocodeTypeName())) { p = new PrimitiveDictionary(); } if (p != null) { p.setName(name); } return p; } public static ArrayList getTypeNames() { ArrayList typeNames = new ArrayList(); typeNames.add(PrimitiveInteger.pseudocodeTypeName()); typeNames.add(PrimitiveString.pseudocodeTypeName()); typeNames.add(PrimitiveBoolean.pseudocodeTypeName()); typeNames.add(PrimitiveList.pseudocodeTypeName()); typeNames.add(PrimitiveGraph.pseudocodeTypeName()); typeNames.add(PrimitiveDirectedGraph.pseudocodeTypeName()); typeNames.add(PrimitiveVertex.pseudocodeTypeName()); typeNames.add(PrimitiveEdge.pseudocodeTypeName()); typeNames.add(PrimitivePriorityQueue.pseudocodeTypeName()); typeNames.add(PrimitivePriorityQueueElement.pseudocodeTypeName()); typeNames.add(PrimitiveDictionary.pseudocodeTypeName()); typeNames.add(PrimitiveNull.pseudocodeTypeName()); return typeNames; } public static PrimitivePointer getPointer(Primitive o) throws DynamicMVCException { int address = 0; for(Primitive p : memory) { if(o == p) { PrimitivePointer pp = new PrimitivePointer(address); return pp; } address++; } throw new DynamicMVCException("The object does not exist in the system memory."); } }