Static Value-Flow Analysis
Public Types | Public Member Functions | List of all members
SVF::DiffPTData< Key, KeySet, Data, DataSet > Class Template Referenceabstract

#include <AbstractPointsToDS.h>

Inheritance diagram for SVF::DiffPTData< Key, KeySet, Data, DataSet >:
SVF::PTData< Key, KeySet, Data, DataSet > SVF::MutableDiffPTData< Key, KeySet, Data, DataSet > SVF::PersistentDiffPTData< Key, KeySet, Data, DataSet >

Public Types

typedef PTData< Key, KeySet, Data, DataSet > BasePTData
 
typedef BasePTData::PTDataTy PTDataTy
 
- Public Types inherited from SVF::PTData< Key, KeySet, Data, DataSet >
enum  PTDataTy {
  Base , MutBase , Diff , MutDiff ,
  DataFlow , MutDataFlow , MutIncDataFlow , Versioned ,
  MutVersioned , PersBase , PersDiff , PersDataFlow ,
  PersIncDataFlow , PersVersioned
}
 Types of a points-to data structures. More...
 

Public Member Functions

 DiffPTData (bool reversePT=true, PTDataTy ty=PTDataTy::Diff)
 
virtual ~DiffPTData ()
 
virtual const DataSet & getDiffPts (Key &var)=0
 Get diff points to. More...
 
virtual bool computeDiffPts (Key &var, const DataSet &all)=0
 
virtual void updatePropaPtsMap (Key &src, Key &dst)=0
 
virtual void clearPropaPts (Key &var)=0
 Clear propagated points-to set of var. More...
 
- Public Member Functions inherited from SVF::PTData< Key, KeySet, Data, DataSet >
 PTData (bool reversePT=true, PTDataTy ty=PTDataTy::Base)
 
virtual ~PTData ()
 
PTDataTy getPTDTY () const
 Get the type of points-to data structure that this is. More...
 
virtual void clear ()=0
 Clears all points-to sets as if nothing is stored. More...
 
virtual const DataSet & getPts (const Key &var)=0
 Get points-to set of var. More...
 
virtual const KeySet & getRevPts (const Data &datum)=0
 Get reverse points-to set of a datum. More...
 
virtual bool addPts (const Key &var, const Data &element)=0
 Adds element to the points-to set associated with var. More...
 
virtual bool unionPts (const Key &dstVar, const Key &srcVar)=0
 Performs pts(dstVar) = pts(dstVar) U pts(srcVar). More...
 
virtual bool unionPts (const Key &dstVar, const DataSet &srcDataSet)=0
 Performs pts(dstVar) = pts(dstVar) U srcDataSet. More...
 
virtual void clearPts (const Key &var, const Data &element)=0
 Clears element from the points-to set of var. More...
 
virtual void clearFullPts (const Key &var)=0
 Fully clears the points-to set of var. More...
 
virtual void remapAllPts (void)=0
 Remaps all points-to sets to use the current mapping. More...
 
virtual void dumpPTData ()=0
 Dump stored keys and points-to sets. More...
 
virtual Map< DataSet, unsigned > getAllPts (bool liveOnly) const =0
 

Static Public Member Functions

static bool classof (const DiffPTData< Key, KeySet, Data, DataSet > *)
 
static bool classof (const PTData< Key, KeySet, Data, DataSet > *ptd)
 

Additional Inherited Members

- Protected Attributes inherited from SVF::PTData< Key, KeySet, Data, DataSet >
bool rev
 Whether we maintain reverse points-to sets or not. More...
 
PTDataTy ptdTy
 

Detailed Description

template<typename Key, typename KeySet, typename Data, typename DataSet>
class SVF::DiffPTData< Key, KeySet, Data, DataSet >

Abstract diff points-to data with cached information. This is an optimisation on top of the base points-to data structure. The points-to information is propagated incrementally only for the different parts.

Definition at line 149 of file AbstractPointsToDS.h.

Member Typedef Documentation

◆ BasePTData

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef PTData<Key, KeySet, Data, DataSet> SVF::DiffPTData< Key, KeySet, Data, DataSet >::BasePTData

Definition at line 152 of file AbstractPointsToDS.h.

◆ PTDataTy

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef BasePTData::PTDataTy SVF::DiffPTData< Key, KeySet, Data, DataSet >::PTDataTy

Definition at line 153 of file AbstractPointsToDS.h.

Constructor & Destructor Documentation

◆ DiffPTData()

template<typename Key , typename KeySet , typename Data , typename DataSet >
SVF::DiffPTData< Key, KeySet, Data, DataSet >::DiffPTData ( bool  reversePT = true,
PTDataTy  ty = PTDataTy::Diff 
)
inline

Definition at line 155 of file AbstractPointsToDS.h.

155 : BasePTData(reversePT, ty) { }
PTData< Key, KeySet, Data, DataSet > BasePTData

◆ ~DiffPTData()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual SVF::DiffPTData< Key, KeySet, Data, DataSet >::~DiffPTData ( )
inlinevirtual

Definition at line 157 of file AbstractPointsToDS.h.

157 { }

Member Function Documentation

◆ classof() [1/2]

template<typename Key , typename KeySet , typename Data , typename DataSet >
static bool SVF::DiffPTData< Key, KeySet, Data, DataSet >::classof ( const DiffPTData< Key, KeySet, Data, DataSet > *  )
inlinestatic

Methods to support type inquiry through isa, cast, and dyn_cast:

Definition at line 176 of file AbstractPointsToDS.h.

177  {
178  return true;
179  }

◆ classof() [2/2]

template<typename Key , typename KeySet , typename Data , typename DataSet >
static bool SVF::DiffPTData< Key, KeySet, Data, DataSet >::classof ( const PTData< Key, KeySet, Data, DataSet > *  ptd)
inlinestatic

Definition at line 180 of file AbstractPointsToDS.h.

181  {
182  return ptd->getPTDTY() == PTDataTy::Diff
183  || ptd->getPTDTY() == PTDataTy::MutDiff
184  || ptd->getPTDTY() == PTDataTy::PersDiff;
185  }

◆ clearPropaPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual void SVF::DiffPTData< Key, KeySet, Data, DataSet >::clearPropaPts ( Key &  var)
pure virtual

◆ computeDiffPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::DiffPTData< Key, KeySet, Data, DataSet >::computeDiffPts ( Key &  var,
const DataSet &  all 
)
pure virtual

Compute diff points to. Return TRUE if diff is not empty.

  1. calculate diff: diff = all - propa.
  2. update propagated pts: propa = all.

Implemented in SVF::PersistentDiffPTData< Key, KeySet, Data, DataSet >, and SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >.

◆ getDiffPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual const DataSet& SVF::DiffPTData< Key, KeySet, Data, DataSet >::getDiffPts ( Key &  var)
pure virtual

◆ updatePropaPtsMap()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual void SVF::DiffPTData< Key, KeySet, Data, DataSet >::updatePropaPtsMap ( Key &  src,
Key &  dst 
)
pure virtual

Update dst's propagated points-to set with src's. The final result is the intersection of these two sets.

Implemented in SVF::PersistentDiffPTData< Key, KeySet, Data, DataSet >, and SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >.


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