// ** This file was generated with DemFGen (vers:05/23/2010)

package edu.neu.ccs.demeterf.demfgen.classes;

import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.demfgen.*;
import edu.neu.ccs.demeterf.demfgen.dgp.DGPFunc;
import edu.neu.ccs.demeterf.demfgen.traversals.Travs;
import edu.neu.ccs.demeterf.demfgen.pcdgp.PCDGPFunc;
import edu.neu.ccs.demeterf.dispatch.*;
import edu.neu.ccs.demeterf.*;
import edu.neu.ccs.demeterf.demfgen.ClassHier.InhrtPair;
import edu.neu.ccs.demeterf.demfgen.DemFGenMain;
import java.io.*;
import java.io.FileInputStream;
import edu.neu.ccs.demeterf.util.Util;
import edu.neu.ccs.demeterf.util.CLI;





/** Representation of CDFile */
public class CDFile{
    protected final IncludeList incl;
    protected final DGPUses dgpuse;
    protected final PackageDef pkg;
    protected final LookDef look;
    protected final ImportList imports;
    protected final TypeDefList types;

    /** Construct a(n) CDFile Instance */
    public CDFile(IncludeList incl, DGPUses dgpuse, PackageDef pkg, LookDef look, ImportList imports, TypeDefList types){
        this.incl = incl;
        this.dgpuse = dgpuse;
        this.pkg = pkg;
        this.look = look;
        this.imports = imports;
        this.types = types;
    }
    /** Is the given object Equal to this CDFile? */
    public boolean equals(Object o){
        if(!(o instanceof CDFile))return false;
        if(o == this)return true;
        CDFile oo = (CDFile)o;
        return (((Object)incl).equals(oo.incl))&&(((Object)dgpuse).equals(oo.dgpuse))&&(((Object)pkg).equals(oo.pkg))&&(((Object)look).equals(oo.look))&&(((Object)imports).equals(oo.imports))&&(((Object)types).equals(oo.types));
    }
    /** Parse an instance of CDFile from the given String */
    public static CDFile parse(String inpt) throws edu.neu.ccs.demeterf.demfgen.classes.ParseException{
        return new edu.neu.ccs.demeterf.demfgen.classes.TheParser(new java.io.StringReader(inpt)).parse_CDFile();
    }
    /** Parse an instance of CDFile from the given Stream */
    public static CDFile parse(java.io.InputStream inpt) throws edu.neu.ccs.demeterf.demfgen.classes.ParseException{
        return new edu.neu.ccs.demeterf.demfgen.classes.TheParser(inpt).parse_CDFile();
    }
    /** Parse an instance of CDFile from the given Reader */
    public static CDFile parse(java.io.Reader inpt) throws edu.neu.ccs.demeterf.demfgen.classes.ParseException{
        return new edu.neu.ccs.demeterf.demfgen.classes.TheParser(inpt).parse_CDFile();
    }

    /** Field Class for CDFile.incl */
    public static class incl extends edu.neu.ccs.demeterf.Fields.any{}
    /** Field Class for CDFile.dgpuse */
    public static class dgpuse extends edu.neu.ccs.demeterf.Fields.any{}
    /** Field Class for CDFile.pkg */
    public static class pkg extends edu.neu.ccs.demeterf.Fields.any{}
    /** Field Class for CDFile.look */
    public static class look extends edu.neu.ccs.demeterf.Fields.any{}
    /** Field Class for CDFile.imports */
    public static class imports extends edu.neu.ccs.demeterf.Fields.any{}
    /** Field Class for CDFile.types */
    public static class types extends edu.neu.ccs.demeterf.Fields.any{}

    /** Add a new TypeDef to this CDFile. */
    public CDFile addType(TypeDef td){
  	  return updateTypes(types.push(td));
    }

    /** DGP method from Class Print */
    public String print(){ return edu.neu.ccs.demeterf.demfgen.classes.Print.PrintM(this); }
    /** DGP method from Class ToStr */
    public String toStr(){ return edu.neu.ccs.demeterf.demfgen.classes.ToStr.ToStrM(this); }
    /** DGP method from Class ToXML */
    public String toXML(){ return edu.neu.ccs.demeterf.demfgen.classes.ToXML.ToXMLM(this); }
    /** Updater for field CDFile.incl */
    public CDFile updateIncl(IncludeList _incl){
        return new CDFile(_incl, dgpuse, pkg, look, imports, types);
    }
    /** Updater for field CDFile.dgpuse */
    public CDFile updateDgpuse(DGPUses _dgpuse){
        return new CDFile(incl, _dgpuse, pkg, look, imports, types);
    }
    /** Updater for field CDFile.pkg */
    public CDFile updatePkg(PackageDef _pkg){
        return new CDFile(incl, dgpuse, _pkg, look, imports, types);
    }
    /** Updater for field CDFile.look */
    public CDFile updateLook(LookDef _look){
        return new CDFile(incl, dgpuse, pkg, _look, imports, types);
    }
    /** Updater for field CDFile.imports */
    public CDFile updateImports(ImportList _imports){
        return new CDFile(incl, dgpuse, pkg, look, _imports, types);
    }
    /** Updater for field CDFile.types */
    public CDFile updateTypes(TypeDefList _types){
        return new CDFile(incl, dgpuse, pkg, look, imports, _types);
    }
    /** Getter for field CDFile.incl */
    public IncludeList getIncl(){ return incl; }
    /** Getter for field CDFile.dgpuse */
    public DGPUses getDgpuse(){ return dgpuse; }
    /** Getter for field CDFile.pkg */
    public PackageDef getPkg(){ return pkg; }
    /** Getter for field CDFile.look */
    public LookDef getLook(){ return look; }
    /** Getter for field CDFile.imports */
    public ImportList getImports(){ return imports; }
    /** Getter for field CDFile.types */
    public TypeDefList getTypes(){ return types; }

}