This is JavaClassFile.h in view mode; [Download] [Up]
// Copyright (c) 1995 David Engberg All rights reserved
// $Id: JavaClassFile.h,v 1.9 1996/05/26 00:15:02 geppetto Exp $
#ifndef _JavaClassFile_h
#define _JavaClassFile_h
#pragma interface
#include "JavaConstant.h"
#include "JavaFieldInfo.h"
#include "JavaMethodInfo.h"
#include "JavaMethodSignature.h"
#include "JavaAccessFlags.h"
#include <vector>
#include <map>
class CJavaSourceFileAttribute;
class CCompiler;
class CJavaMethodInfo;
class ostream;
class istream;
typedef map<CJavaFieldSignature, const CJavaFieldInfo*, less<CJavaFieldSignature> > FieldTable;
typedef map<CJavaMethodSignature, const CJavaMethodInfo*, less<CJavaMethodSignature> > MethodTable;
//
// Class name : CJavaClassFile
// Description : This class tries to encapsulate the Java class file format
// as specified in the Java virtual machine documentation.
// As such, this isn't designed to be optimized for any specific usage
// other than streaming to and from a java class file.
//
class CJavaClassFile {
public:
virtual ~CJavaClassFile();
static CJavaClassFile* ParseFromString(const string& fileBuffer,
bool interfaceOnly = false);
static CJavaClassFile* ParseFromStream(istream& inStream,
bool interfaceOnly = false);
static unsigned short ReadJavaU2(string::const_iterator& bufferPointer);
static unsigned long ReadJavaU4(string::const_iterator& bufferPointer);
static void WriteJavaU2(ostream& to, unsigned short);
static void WriteJavaU4(ostream& to, unsigned long);
static void WriteJavaU2(string& to, unsigned short);
static void WriteJavaU4(string& to, unsigned long);
CJavaAccessFlags GetAccessFlags() const { return fAccessFlags; }
typedef vector<CJavaConstant*> ConstantPool;
const CJavaConstant* LookupConstant(JavaConstantIndex index) const;
unicode_string GetClassName() const { return fThisClassName; }
unicode_string GetSuperclassName() const { return fSuperclassName; }
typedef deque<unicode_string> InterfaceList;
unsigned long CountInterfaces() const;
InterfaceList::const_iterator GetInterfaceBegin() const;
InterfaceList::const_iterator GetInterfaceEnd() const;
bool SameParents(const CJavaClassFile& other) const;
unicode_string GetShortName() const;
unicode_string GetPackageName() const;
unsigned long GetCompilerVersion() const;
bool LookupFieldSignature(JavaConstantIndex index,
unicode_string& setClassName,
CJavaFieldSignature& setField) const;
bool LookupMethodSignature(JavaConstantIndex index,
unicode_string& setClassName,
CJavaMethodSignature& setMethod) const;
bool LookupInterfaceSignature(JavaConstantIndex index,
unicode_string& setClassName,
CJavaMethodSignature& setMethod) const;
bool LookupClassName(JavaConstantIndex index, unicode_string& setName) const;
const CJavaFieldInfo* LookupField(const unicode_string& name) const;
const CJavaFieldInfo* LookupField(const CJavaFieldSignature& name) const;
const CJavaMethodInfo*
LookupMethod(const CJavaMethodSignature& method) const;
const CJavaMethodInfo*
LookupMethodIgnoreReturn(const CJavaMethodSignature& method) const;
void DisassembleClass(ostream& toStream) const;
void Compile(ostream& toStream);
JavaConstantIndex AddLongConstant(unsigned long long doubleLong);
JavaConstantIndex AddIntegerConstant(unsigned long integerValue);
JavaConstantIndex AddFloatConstant(float value);
JavaConstantIndex AddDoubleConstant(double value);
JavaConstantIndex AddAscizConstant(const unicode_string& value);
JavaConstantIndex AddAscizConstant(const string& value);
JavaConstantIndex AddStringConstant(JavaConstantIndex ascizIndex);
JavaConstantIndex AddClassConstant(const unicode_string& name);
JavaConstantIndex AddFieldConstant(const unicode_string& className,
const unicode_string& fieldName, const CJavaTypeSignature& type);
JavaConstantIndex AddMethodConstant(const unicode_string& className,
const CJavaMethodSignature& method);
JavaConstantIndex AddInterfaceConstant(const unicode_string& className,
const CJavaMethodSignature& method);
JavaConstantIndex AddNameTypeConstant(const unicode_string& name,
const unicode_string& typeString);
protected:
friend class CCompiler;
CJavaClassFile();
void InsertMethod(CJavaMethodInfo* methodInfo);
JavaConstantIndex InsertConstant(CJavaConstant* adoptConstant);
private:
unsigned long fVersion;
ConstantPool fConstants;
CJavaAccessFlags fAccessFlags;
unicode_string fThisClassName;
unicode_string fSuperclassName;
InterfaceList fInterfaces;
FieldTable fFields;
MethodTable fMethods;
CJavaSourceFileAttribute* fSourceFile;
};
#endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.