decompiler  1.0.0
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
ConstantPoolInternal Class Reference

An implementation of the ConstantPool interface storing records internally in RAM. More...

#include <cpool.hh>

Inheritance diagram for ConstantPoolInternal:
ConstantPool

Classes

class  CheapSorter
 A cheap (efficient) placeholder for a reference to a constant pool record. More...
 

Public Member Functions

virtual const CPoolRecordgetRecord (const vector< uintb > &refs) const
 Retrieve a constant pool record (CPoolRecord) given a reference to it. More...
 
virtual bool empty (void) const
 Is the container empty of records.
 
virtual void clear (void)
 Release any (local) resources.
 
virtual void saveXml (ostream &s) const
 Save all records in this container to an XML stream. More...
 
virtual void restoreXml (const Element *el, TypeFactory &typegrp)
 Restore constant pool records from an XML stream. More...
 
- Public Member Functions inherited from ConstantPool
virtual ~ConstantPool ()
 Destructor.
 
void putRecord (const vector< uintb > &refs, uint4 tag, const string &tok, Datatype *ct)
 A a new constant pool record to this database. More...
 
const CPoolRecordrestoreXmlRecord (const vector< uintb > &refs, const Element *el, TypeFactory &typegrp)
 Restore a CPoolRecord given a reference and an XML stream. More...
 

Private Member Functions

virtual CPoolRecordcreateRecord (const vector< uintb > &refs)
 Allocate a new CPoolRecord object, given a reference to it. More...
 

Private Attributes

map< CheapSorter, CPoolRecordcpoolMap
 A map from reference to constant pool record.
 

Detailed Description

An implementation of the ConstantPool interface storing records internally in RAM.

The CPoolRecord objects are held directly in a map container. This class can be used as a stand-alone ConstantPool that holds all its records in RAM. Or, it can act as a local CPoolRecord cache for some other implementation.

Member Function Documentation

CPoolRecord * ConstantPoolInternal::createRecord ( const vector< uintb > &  refs)
privatevirtual

Allocate a new CPoolRecord object, given a reference to it.

The object will still need to be initialized but is already associated with the reference. Any issue with allocation (like a dupicate reference) causes an exception.

Parameters
refsis the reference of 1 or more identifying integers
Returns
the new CPoolRecord

Implements ConstantPool.

References CPoolRecord::CPoolRecord().

const CPoolRecord * ConstantPoolInternal::getRecord ( const vector< uintb > &  refs) const
virtual

Retrieve a constant pool record (CPoolRecord) given a reference to it.

Parameters
refsis the reference (made up of 1 or more identifying integers)
Returns
the matching CPoolRecord or NULL if none matches the reference

Implements ConstantPool.

Referenced by ConstantPoolGhidra::getRecord().

void ConstantPoolInternal::restoreXml ( const Element el,
TypeFactory typegrp 
)
virtual

Restore constant pool records from an XML stream.

(If supported) The container is populated with CPooLRecords initialized from a <constantpool> XML tag.

Parameters
elis the XML element
typegrpis the TypeFactory used to resolve data-type references in the XML

Implements ConstantPool.

References ConstantPoolInternal::CheapSorter::apply(), Element::getChildren(), CPoolRecord::restoreXml(), and ConstantPoolInternal::CheapSorter::restoreXml().

void ConstantPoolInternal::saveXml ( ostream &  s) const
virtual

Save all records in this container to an XML stream.

(If supported) An <constantpool> element is written containing <cpoolrec> child elements for each CPoolRecord in the container.

Parameters
sis the output stream

Implements ConstantPool.


The documentation for this class was generated from the following files: