/*
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.");
}
}