From 4d5e159608d2966dc6d6ef359fa0813bd5f61d21 Mon Sep 17 00:00:00 2001
From: bdr7fv <bdr7fv@git.zephyr-software.com>
Date: Wed, 5 Sep 2012 16:39:11 +0000
Subject: [PATCH] Fixed some tabbing issues in core/fileir.hpp, added signature
 for fileir destructor in fileir.hpp. Implement fileir destructor in
 fileir.cpp. Multiple calls to generate spri no longer eat memory.

Former-commit-id: 532c38b749c51e49bfe065590013fe66124d3152
---
 libIRDB/include/core/fileir.hpp | 55 +++++++++++++++++----------------
 libIRDB/src/core/fileir.cpp     | 23 ++++++++++++++
 2 files changed, 51 insertions(+), 27 deletions(-)

diff --git a/libIRDB/include/core/fileir.hpp b/libIRDB/include/core/fileir.hpp
index ef1f42f12..0b13a180e 100644
--- a/libIRDB/include/core/fileir.hpp
+++ b/libIRDB/include/core/fileir.hpp
@@ -5,19 +5,20 @@
 // (i.e., and unmodified Variant) or a modified variant.
 class FileIR_t : public BaseObj_t
 {
-    public:
+	public:
 
-        // Create a Variant from the database
-        FileIR_t(const VariantID_t &newprogid, File_t* fid=NULL);
+		// Create a Variant from the database
+	FileIR_t(const VariantID_t &newprogid, File_t* fid=NULL);
+	~FileIR_t();
   
-        // DB operations
-        void WriteToDB();
+	// DB operations
+	void WriteToDB();
 
-        // accessors and mutators in one
-        std::set<Function_t*>& GetFunctions() { return funcs; }
-        std::set<Instruction_t*>& GetInstructions() { return insns; }
-        std::set<AddressID_t*>&    GetAddresses() { return addrs; }
-        std::set<Relocation_t*>&    GetRelocations() { return relocs; }
+	// accessors and mutators in one
+	std::set<Function_t*>& GetFunctions() { return funcs; }
+	std::set<Instruction_t*>& GetInstructions() { return insns; }
+	std::set<AddressID_t*>&	   GetAddresses() { return addrs; }
+	std::set<Relocation_t*>&	GetRelocations() { return relocs; }
 
 	// generate the spri rules into the output file, fout.
 	void GenerateSPRI(std::ostream &fout);
@@ -42,7 +43,7 @@ class FileIR_t : public BaseObj_t
 	//removes the mapping for orig->assembly from the map. 
 	void ChangeRegistryKey(Instruction_t* orig, Instruction_t* updated);
 
-    private:
+	private:
 	#define ASM_REG_MAX_SIZE 500000
 
 	typedef std::map<Instruction_t*,std::string> registry_type;
@@ -52,29 +53,29 @@ class FileIR_t : public BaseObj_t
 
 	registry_type assembly_registry;
 
-        void ReadFromDB();  //accesses DB
+	void ReadFromDB();	//accesses DB
 
-        std::set<Function_t*> funcs;
-        std::set<Instruction_t*> insns;
-        std::set<AddressID_t*> addrs;
-        std::set<Relocation_t*> relocs;
-        VariantID_t progid;
+	std::set<Function_t*> funcs;
+	std::set<Instruction_t*> insns;
+	std::set<AddressID_t*> addrs;
+	std::set<Relocation_t*> relocs;
+	VariantID_t progid;
 	File_t* fileptr;
 
 	std::map<db_id_t,AddressID_t*> ReadAddrsFromDB();
 	std::map<db_id_t,Function_t*> ReadFuncsFromDB
-		(
-			std::map<db_id_t,AddressID_t*> &addrMap
-		);
+	(
+		std::map<db_id_t,AddressID_t*> &addrMap
+	);
 	std::map<db_id_t,Instruction_t*> ReadInsnsFromDB 
-		(	
-			std::map<db_id_t,Function_t*> &funcMap,
-			std::map<db_id_t,AddressID_t*> &addrMap
-		) ;
+	(	
+		std::map<db_id_t,Function_t*> &funcMap,
+		std::map<db_id_t,AddressID_t*> &addrMap
+	) ;
 	void ReadRelocsFromDB
-       	 	(
-                	std::map<db_id_t,Instruction_t*>        &insnMap
-        	);
+	(
+		std::map<db_id_t,Instruction_t*>		&insnMap
+	);
 
 
 
diff --git a/libIRDB/src/core/fileir.cpp b/libIRDB/src/core/fileir.cpp
index 114691298..19731f509 100644
--- a/libIRDB/src/core/fileir.cpp
+++ b/libIRDB/src/core/fileir.cpp
@@ -43,6 +43,29 @@ FileIR_t::FileIR_t(const VariantID_t &newprogid, File_t* fid) : BaseObj_t(NULL)
 		ReadFromDB();
 
 }
+
+FileIR_t::~FileIR_t()
+{
+	for(std::set<Function_t*>::const_iterator i=funcs.begin(); i!=funcs.end(); ++i)
+	{
+		delete *i;
+	}
+
+	for(std::set<Instruction_t*>::const_iterator i=insns.begin(); i!=insns.end(); ++i)
+	{
+		delete *i;
+	}
+
+	for(std::set<AddressID_t*>::const_iterator i=addrs.begin(); i!=addrs.end(); ++i)
+	{
+		delete *i;
+	}
+
+	for(std::set<Relocation_t*>::const_iterator i=relocs.begin(); i!=relocs.end(); ++i)
+	{
+		delete *i;
+	}
+}
   
 // DB operations
 void FileIR_t::ReadFromDB()
-- 
GitLab