[commit] r2168 - in trunk/GME: Core Mga

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Wed Apr 10 08:46:09 CDT 2013


Author: ksmyth
Date: Wed Apr 10 08:46:09 2013
New Revision: 2168

Log:
Some memory improvements

Modified:
   trunk/GME/Core/CoreAttribute.h
   trunk/GME/Core/CoreMetaAttribute.h
   trunk/GME/Core/CoreObject.h
   trunk/GME/Core/CoreTerritory.h
   trunk/GME/Core/CoreTransactionItem.h
   trunk/GME/Mga/MgaAttribute.cpp
   trunk/GME/Mga/MgaAttribute.h

Modified: trunk/GME/Core/CoreAttribute.h
==============================================================================
--- trunk/GME/Core/CoreAttribute.h	Wed Apr 10 08:45:30 2013	(r2167)
+++ trunk/GME/Core/CoreAttribute.h	Wed Apr 10 08:46:09 2013	(r2168)
@@ -29,6 +29,8 @@
 };
 
 // --------------------------- CCoreAttribute
+#pragma pack(push)
+#pragma pack(1)
 
 class ATL_NO_VTABLE CCoreAttribute : 
 	public CComObjectRootEx<CComSingleThreadModel>,
@@ -141,6 +143,8 @@
 #endif
 };
 
+#pragma pack(pop)
+
 // --------------------------- CCoreLockAttribute
 
 class ATL_NO_VTABLE CCoreLockAttribute :
@@ -154,11 +158,11 @@
 
 protected:
 	typedef unsigned short lock_count_type;
+	locking_type original_locking;	// local locking when enterging dirty state
 
 	lock_count_type read_count;
 	lock_count_type write_count;
 
-	locking_type original_locking;	// local locking when enterging dirty state
 	lockval_type others_lockval;	// original lockval minus local locking
 
 public:
@@ -305,9 +309,9 @@
 	typedef objects_type::iterator objects_iterator;
 
 protected:
+	bool isEmpty;
 	values_type values;
 	objects_iterator backref;
-	bool isEmpty;
 
 // ------- CopyTo
 

Modified: trunk/GME/Core/CoreMetaAttribute.h
==============================================================================
--- trunk/GME/Core/CoreMetaAttribute.h	Wed Apr 10 08:45:30 2013	(r2167)
+++ trunk/GME/Core/CoreMetaAttribute.h	Wed Apr 10 08:46:09 2013	(r2168)
@@ -37,9 +37,9 @@
 public:
 	CCoreMetaObject *object;
 	attrid_type attrid;
+	valtype_type valtype;
 	std::wstring token;
 	std::wstring name;
-	valtype_type valtype;
 
 // ------- Methods
 

Modified: trunk/GME/Core/CoreObject.h
==============================================================================
--- trunk/GME/Core/CoreObject.h	Wed Apr 10 08:45:30 2013	(r2167)
+++ trunk/GME/Core/CoreObject.h	Wed Apr 10 08:46:09 2013	(r2168)
@@ -18,8 +18,7 @@
 class ATL_NO_VTABLE CCoreObject : 
 	public CComObjectRootEx<CComSingleThreadModel>,
 	public IDispatchImpl<ICoreObject, &IID_ICoreObject, &LIBID_MGACoreLib>,
-	public ISupportErrorInfoImpl<&IID_ICoreObject>,
-	public CCoreFinalTrItem
+	public CCoreFinalTrItemImpl<&IID_ICoreObject>
 {
 public:
 	CCoreObject();

Modified: trunk/GME/Core/CoreTerritory.h
==============================================================================
--- trunk/GME/Core/CoreTerritory.h	Wed Apr 10 08:45:30 2013	(r2167)
+++ trunk/GME/Core/CoreTerritory.h	Wed Apr 10 08:46:09 2013	(r2168)
@@ -26,9 +26,8 @@
 class ATL_NO_VTABLE CCoreTerritory : 
 	public CComObjectRootEx<CComSingleThreadModel>,
 	public IDispatchImpl<ICoreTerritory, &IID_ICoreTerritory, &LIBID_MGACoreLib>,
-	public ISupportErrorInfoImpl<&IID_ICoreTerritory>,
-	public CCoreTransactionItem,
-	public CCoreFinalTrItem
+	public CCoreFinalTrItemImpl<&IID_ICoreTerritory>,
+	public CCoreTransactionItem
 {
 public:
 	CCoreTerritory();

Modified: trunk/GME/Core/CoreTransactionItem.h
==============================================================================
--- trunk/GME/Core/CoreTransactionItem.h	Wed Apr 10 08:45:30 2013	(r2167)
+++ trunk/GME/Core/CoreTransactionItem.h	Wed Apr 10 08:46:09 2013	(r2168)
@@ -35,7 +35,7 @@
 // call CCoreProject::RegisterFinalTrItem to register, call it only once
 // CoreObjects register to group database access of their CoreAttributes
 
-class ATL_NO_VTABLE CCoreFinalTrItem
+class ATL_NO_VTABLE CCoreFinalTrItem : public ISupportErrorInfo // all subclasses will inherit ISupportErrorInfoImpl, so inherit here to save a vtable entry
 {
 public:
 	// called for final abort, clear dirty
@@ -48,6 +48,18 @@
 	virtual void CommitFinalTransactionFinish(bool undo) NOTHROW = 0;
 };
 
+template<const IID* piid>
+class ATL_NO_VTABLE CCoreFinalTrItemImpl : public CCoreFinalTrItem // all subclasses will inherit ISupportErrorInfoImpl, so inherit here to save a vtable entry
+{
+	// ISupportErrorInfoImpl
+public:
+	STDMETHOD(InterfaceSupportsErrorInfo)(_In_ REFIID riid)
+	{
+		return (InlineIsEqualGUID(riid,*piid)) ? S_OK : S_FALSE;
+	}
+
+};
+
 // --------------------------- CCoreUndoItem
 
 // call CCoreProject::RegisterUndoItem to register,

Modified: trunk/GME/Mga/MgaAttribute.cpp
==============================================================================
--- trunk/GME/Mga/MgaAttribute.cpp	Wed Apr 10 08:45:30 2013	(r2167)
+++ trunk/GME/Mga/MgaAttribute.cpp	Wed Apr 10 08:46:09 2013	(r2168)
@@ -22,10 +22,6 @@
 	COMTHROW(meta->get_ValueType(&attrtyp));
 	inputtyp = attrtyp;
 	if(attrtyp == ATTVAL_ENUM) attrtyp = ATTVAL_STRING;
-	regprefix = "AttrRegs/";
-	CComBSTR metaname;
-	COMTHROW(meta->get_Name(&metaname));
-	COMTHROW(regprefix.Append(metaname));
 }
 
 STDMETHODIMP CMgaAttribute::get_Owner( IMgaFCO **pVal) {  
@@ -992,9 +988,4 @@
 		mref = mr;		
 		fco = o;
 		mgaproject = p;
-		CComPtr<IMgaMetaAspect> meta;
-		COMTHROW(get_MetaAspect(&meta));
-		COMTHROW(meta->get_Name(&aspname));
-		regprefix = "PartRegs/";
-		COMTHROW(regprefix.Append(aspname));
 }

Modified: trunk/GME/Mga/MgaAttribute.h
==============================================================================
--- trunk/GME/Mga/MgaAttribute.h	Wed Apr 10 08:45:30 2013	(r2167)
+++ trunk/GME/Mga/MgaAttribute.h	Wed Apr 10 08:46:09 2013	(r2168)
@@ -91,7 +91,16 @@
 	FCOPtr fco;
 	attval_enum attrtyp, inputtyp;
 	CMgaProject *mgaproject;
-	CComBSTR(regprefix);
+	CComBSTR getregprefix()
+	{
+		CComQIPtr<IMgaMetaAttribute> meta = mgaproject->FindMetaRef(mref);
+		CComBSTR _regprefix = L"AttrRegs/";
+		CComBSTR metaname;
+		COMTHROW(meta->get_Name(&metaname));
+		COMTHROW(_regprefix.Append(metaname));
+		return _regprefix;
+	}
+	__declspec(property(get=getregprefix)) CComBSTR regprefix;
 };
 
 
@@ -289,8 +298,17 @@
 	long load_status;
 	FCOPtr fco;
 	CMgaProject *mgaproject;  // Holds no reference
-	CComBSTR(regprefix);
-	CComBSTR(aspname);
+	CComBSTR getregprefix()
+	{
+		CComPtr<IMgaMetaAspect> meta;
+		COMTHROW(get_MetaAspect(&meta));
+		CComBSTR aspname;
+		COMTHROW(meta->get_Name(&aspname));
+		CComBSTR _regprefix = L"PartRegs/";
+		COMTHROW(_regprefix.Append(aspname));
+		return _regprefix;
+	}
+	__declspec(property(get=getregprefix)) CComBSTR regprefix;
 };
 
 


More information about the gme-commit mailing list