mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- llvm/ConstantPool.h - Define the constant pool class ------*- C++ -*-=//
 | |
| //
 | |
| // This file implements a constant pool that is split into different type 
 | |
| // planes.  This allows searching for a typed object to go a little faster.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_CONSTANTPOOL_H
 | |
| #define LLVM_CONSTANTPOOL_H
 | |
| 
 | |
| #include <vector>
 | |
| #include "llvm/ValueHolder.h"
 | |
| 
 | |
| class ConstPoolVal;
 | |
| class SymTabValue;
 | |
| class Type;
 | |
| 
 | |
| class ConstantPool {
 | |
| public:
 | |
|   typedef ValueHolder<ConstPoolVal, SymTabValue> PlaneType;
 | |
| private:
 | |
|   typedef vector<PlaneType*> PlanesType;
 | |
|   PlanesType Planes;
 | |
|   SymTabValue *Parent;
 | |
| 
 | |
|   inline void resize(unsigned size);
 | |
| public:
 | |
|   inline ConstantPool(SymTabValue *P) { Parent = P; }
 | |
|   inline ~ConstantPool() { delete_all(); }
 | |
| 
 | |
|   inline       SymTabValue *getParent()       { return Parent; }
 | |
|   inline const SymTabValue *getParent() const { return Parent; }
 | |
| 
 | |
|   void setParent(SymTabValue *STV);
 | |
| 
 | |
|   void dropAllReferences();  // Drop all references to other constants
 | |
| 
 | |
|   // Constant getPlane - Returns true if the type plane does not exist, 
 | |
|   // otherwise updates the pointer to point to the correct plane.
 | |
|   //
 | |
|   bool getPlane(const Type *T, const PlaneType *&Plane) const;
 | |
|   bool getPlane(const Type *T,       PlaneType *&Plane);
 | |
| 
 | |
|   // Normal getPlane - Resizes constant pool to contain type even if it doesn't
 | |
|   // already have it.
 | |
|   //
 | |
|   PlaneType &getPlane(const Type *T);
 | |
| 
 | |
|   // insert - Add constant into the symbol table...
 | |
|   void insert(ConstPoolVal *N);
 | |
|   bool remove(ConstPoolVal *N);   // Returns true on failure 
 | |
| 
 | |
|   void delete_all();
 | |
| 
 | |
|   // find - Search to see if a constant of the specified value is already in
 | |
|   // the constant table.
 | |
|   //
 | |
|   const ConstPoolVal *find(const ConstPoolVal *V) const;
 | |
|         ConstPoolVal *find(const ConstPoolVal *V)      ;
 | |
|   const ConstPoolVal *find(const Type *Ty) const;
 | |
|         ConstPoolVal *find(const Type *Ty)      ;
 | |
| 
 | |
|   // Plane iteration support
 | |
|   //
 | |
|   typedef PlanesType::iterator       plane_iterator;
 | |
|   typedef PlanesType::const_iterator plane_const_iterator;
 | |
| 
 | |
|   inline plane_iterator       begin()       { return Planes.begin(); }
 | |
|   inline plane_const_iterator begin() const { return Planes.begin(); }
 | |
|   inline plane_iterator       end()         { return Planes.end(); }
 | |
|   inline plane_const_iterator end()   const { return Planes.end(); }
 | |
| };
 | |
| 
 | |
| #endif
 |