Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

119 lines
3.7 KiB

//====== Copyright ©, Valve Corporation, All rights reserved. =======
//
// Purpose: Base class for transactions that modify a CGCSharedObjectCache and the database
//
//=============================================================================
#ifndef SHAREDOBJECTTRANSACTION_H
#define SHAREDOBJECTTRANSACTION_H
#ifdef _WIN32
#pragma once
#endif
namespace GCSDK
{
class CSharedObjectTransaction
{
public:
/**
* Constructor that will begin a transaction
* @param sqlAccess
* @param pName
*/
CSharedObjectTransaction( CSQLAccess &sqlAccess, const char *pName );
/**
* Destructor
*/
~CSharedObjectTransaction();
/**
* Adds an object that exists in the given CGCSharedObjectCache to be managed in this transaction.
* Call this before making any modifications to the object
* @param pSOCache the owner CGCSharedObjectCache
* @param pObject the object that will be modified
*/
bool AddManagedObject( CGCSharedObjectCache *pSOCache, CSharedObject *pObject );
/**
* Adds a brand new object to the given CGCSharedObjectCache
* @param pSOCache the owner CGCSharedObjectCache
* @param pObject the newly created object
* @return true if successful, false otherwise
*/
bool BAddNewObject( CGCSharedObjectCache *pSOCache, CSharedObject *pObject, bool bAddToDatabase = true );
/**
* Removes an existing object from the CGCSharedObjectCache
* @param pSOCache the owner CGCSharedObjectCache
* @param pObject the object to be removed from the CGCSharedObjectCache
* @param bRemoveFromDatabase whether to remove the item from the database or not
* @return true if successful, false otherwise
*/
bool BRemoveObject( CGCSharedObjectCache *pSOCache, CSharedObject *pObject );
/**
* Marks in the transaction that the object was modified. The object must have been previously added via
* the AddManagedObject() call in order for the object to be marked dirty. If the object is new to the
* CGCSharedObjectCache, then calling this will return false (which is not necessarily an error)
*
* @param pObject the object that will be modified
* @param unFieldIdx the field that was changed
* @return true if the field was marked dirty, false otherwise.
*/
bool BModifiedObject( CSharedObject *pObject, uint32 unFieldIdx );
/**
* @param pSOCache
* @param soIndex
* @return the CSharedObject that matches either in the CGCSharedObjectCache or to be added
*/
CSharedObject *FindSharedObject( CGCSharedObjectCache *pSOCache, const CSharedObject &soIndex );
/**
* Rolls back any changes made to the objects in-memory and in the database
*
* This function should not be made virtual -- it's called from within the destructor.
*/
void Rollback();
/**
* Commits any changes to the database and also to memory
* @return true if successful, false otherwise
*/
bool BYieldingCommit( bool bAllowEmpty = false );
/**
* @return GCSDK::CSQLAccess associated with this transaction
*/
CSQLAccess &GetSQLAccess() { return m_sqlAccess; }
protected:
/**
* Reverts all in-memory modifications and deletes all newly created objects.
*
* This function should not be made virtual -- it's called from within the destructor.
*/
void Undo();
struct undoinfo_t
{
CSharedObject *pObject;
CGCSharedObjectCache *pSOCache;
CSharedObject *pOriginalCopy;
bool bAddToDatabase;
};
// variables
CUtlVector< undoinfo_t > m_vecObjects_Added;
CUtlVector< undoinfo_t > m_vecObjects_Removed;
CUtlVector< undoinfo_t > m_vecObjects_Modified;
CSQLAccess &m_sqlAccess;
}; // class CSharedObjectTransaction
}; // namespace GCSDK
#endif // SHAREDOBJECTTRANSACTION_H