file: object.h
/***************************************************************************
object + derived classes
object Class
made in C++
***************************************************************************/
/*
This file contains the "class" declaration and method declarations for the
pure virtual object class, and it's derived classes.
define inlined methods:
void listing::output(line& in,ostream& dumper) -dumps map to "dumper" //OVERLOAD CALL: output: object.cc(ex_listing), object.cc(object_object), object.h(listing)
Revision History:
First made by John Langford on 3/4/97
*/
/*
Class: object
Description: This class assembles various lines of code into a map
and dumps the map out when desired.
Private Members: map<int,line,comp_int> code -the map that orders each
-line
resolved_line lineres -the source for lines of code
error err - the error handling object.
Static Members: none
Base Classes: none.
Friend Classes: none
Static Members: none
Public Members: none
Constructors: object::object(String filename)
Methods:
private:
virtual void getcode()=0; -pure virtual which gets lines and inserts //OVERLOAD CALL: getcode: object.cc(listing), object.cc(object_object)
-them into the map
virtual void output(line&,ostream&)=0; //OVERLOAD CALL: output: object.cc(ex_listing), object.cc(object_object), object.h(listing)
-outputs a line of code to the output stream
public:
constructor:
object(String filename):lineres(filename){} -just calls constructor for
-lines of code source
void dump(String filename) -causes the code map to be
-dumped to filename
Error Handler: err
*/
#include <assert.h>
#include <stl.h>
#include <String.h>
#include <iostream.h>
#include <fstream.h>
#include "resolved_line.h"
struct comp_int{
bool operator() (const int i1, const int i2) const //OVERLOAD CALL: operator: error.cc(arg_out), error.cc(error), error.cc(error), error.cc(error), filter.cc(foo), filtermain.cc(comp_String), direct.cpp(include), direct.cpp(define), direct.cpp(ifdef), direct.cpp(ifndef), direct.cpp(_else), direct.cpp(endif)
{
return i1<i2;
};
};
class object {
protected:
map<int,line,comp_int> code;
resolved_line lineres;
error err;
virtual void getcode()=0; //OVERLOAD CALL: getcode: object.cc(listing), object.cc(object_object)
virtual void output(line&,ostream&)=0; //OVERLOAD CALL: output: object.cc(ex_listing), object.cc(object_object), object.h(listing)
public:
object(String filename):lineres(filename){};
void dump(String filename);
};
/*
Class: object_object
Description: instantiation of object class which outputs pure
opcodes
Private Members: int location_number; used to fill in nop's in output
Static Members: none
Base Classes: object
Friend Classes: none
Static Members: none
Public Members: none
Constructors: object_object::object_object(String filename)
Methods:
private:
virtual void getcode(); -gets lines and inserts compiled lines into the //OVERLOAD CALL: getcode: object.cc(listing), object.cc(object_object)
-map
virtual void output(line&,ostream&)=0; //OVERLOAD CALL: output: object.cc(ex_listing), object.cc(object_object), object.h(listing)
-outputs an opcode to the output stream.
public:
none.
Error Handler: err
*/
class object_object:public object{
protected:
int location_number;
public:
object_object(String filename):object(filename){location_number=0;};
private:
virtual void output(line&,ostream&); //OVERLOAD CALL: output: object.cc(ex_listing), object.cc(object_object), object.h(listing)
virtual void getcode(); //OVERLOAD CALL: getcode: object.cc(listing), object.cc(object_object)
};
/*
Class: ex_listing (executable listing)
Description: instantiation of object class which outputs human
readable instructions
Private Members: none
Static Members: none
Base Classes: object_object
Friend Classes: none
Static Members: none
Public Members: none
Constructors: ex_listing::ex_listing(String filename)
Methods:
private:
virtual void output(line&,ostream&)=0; //OVERLOAD CALL: output: object.cc(ex_listing), object.cc(object_object), object.h(listing)
-outputs an opcode in a human readable way
public:
none.
Error Handler: err
*/
class ex_listing : public object_object
{
public:
ex_listing(String filename):object_object(filename){};
private:
virtual void output(line& in, ostream& dumper); //OVERLOAD CALL: output: object.cc(ex_listing), object.cc(object_object), object.h(listing)
};
/*
Class: listing (executable listing)
Description: Instantiation of object class which outputs a full
listing file, including comments.
Private Members: none
Static Members: none
Base Classes: object
Friend Classes: none
Static Members: none
Public Members: none
Constructors: listing::listing(String filename)
Methods:
private:
virtual void output(line&,ostream&)=0; //OVERLOAD CALL: output: object.cc(ex_listing), object.cc(object_object), object.h(listing)
-outputs an line from an assembly file with
-arguments resolved
virtual void getcode(); -inserts all lines recieved into a map. //OVERLOAD CALL: getcode: object.cc(listing), object.cc(object_object)
public:
none.
Error Handler: err
*/
class listing:public object
{
public:
listing(String filename):object(filename){};
private:
virtual void output(line& in,ostream& dumper); //OVERLOAD CALL: output: object.cc(ex_listing), object.cc(object_object), object.h(listing)
virtual void getcode(); //OVERLOAD CALL: getcode: object.cc(listing), object.cc(object_object)
};
void listing::output(line& in,ostream& dumper)
{//duhh...
dumper << in.number() << ":" << in.resolvedstring();
};
C++ to HTML Conversion by ctoohtml