#include "StdAfx.h" #include "SignalItem.h" #include "GlobalValue.h" #include "UnionValueProperty.h" CSignalItem::CSignalItem( int nUniqueIndex ) { m_nUniqueIndex = nUniqueIndex; m_nParamUniqueIndex = 0; m_bEnableCopyAndPaste = false; } CSignalItem::~CSignalItem() { SAFE_DELETE_PVEC( m_pVecList ); } bool CSignalItem::AddParameter( CUnionValueProperty *pVariable, bool bAllowUnique ) { m_pVecList.push_back( pVariable ); if( bAllowUnique ) { if( m_nParamUniqueIndex >= 64 ) { m_pVecList.erase( m_pVecList.end() - 1 ); return false; } m_nVecUniqueList.push_back( m_nParamUniqueIndex ); m_nParamUniqueIndex++; } return true; } void CSignalItem::RemoveParameter( CString &szStr ) { for( DWORD i=0; iGetDescription() == szStr ) { SAFE_DELETE( m_pVecList[i] ); m_pVecList.erase( m_pVecList.begin() + i ); m_nVecUniqueList.erase( m_nVecUniqueList.begin() + i ); } } } bool CSignalItem::IsExistParameter( CString &szStr, CString &szOriginalName ) { for( DWORD i=0; iGetDescription(), szStr ) == NULL ) { if( !szOriginalName.IsEmpty() && strcmp( m_pVecList[i]->GetDescription(), szOriginalName ) == NULL ) continue; return true; } } return false; } CUnionValueProperty *CSignalItem::GetParameterFromName( CString &szName ) { for( DWORD i=0; iGetDescription(), szName ) == NULL ) return m_pVecList[i]; } return NULL; } bool CSignalItem::Save( FILE *fp ) { WriteCString( &m_szName, fp ); fwrite( &m_nUniqueIndex, sizeof(int), 1, fp ); fwrite( &m_nParamUniqueIndex, sizeof(int), 1, fp ); fwrite( &m_nInitialsColor, sizeof(int), 1, fp ); fwrite( &m_nBackgroundColor, sizeof(int), 1, fp ); fwrite( &m_bHasLength, sizeof(bool), 1, fp ); DWORD dwCount = (int)m_pVecList.size(); fwrite( &dwCount, sizeof(DWORD), 1, fp ); for( DWORD i=0; iGetType(); CString szDesc = m_pVecList[i]->GetDescription(); CString szSubDesc = m_pVecList[i]->GetSubDescription(); fwrite( &m_nVecUniqueList[i], sizeof(int), 1, fp ); fwrite( &nType, sizeof(int), 1, fp ); WriteCString( &szDesc, fp ); WriteCString( &szSubDesc, fp ); } return true; } bool CSignalItem::Load( FILE *fp ) { ReadCString( &m_szName, fp ); fread( &m_nUniqueIndex, sizeof(int), 1, fp ); fread( &m_nParamUniqueIndex, sizeof(int), 1, fp ); fread( &m_nInitialsColor, sizeof(int), 1, fp ); fread( &m_nBackgroundColor, sizeof(int), 1, fp ); fread( &m_bHasLength, sizeof(bool), 1, fp ); DWORD dwCount; fread( &dwCount, sizeof(DWORD), 1, fp ); for( DWORD i=0; iSetDescription( szDesc ); pVariable->SetSubDescription( szSubDesc.GetBuffer(), true ); AddParameter( pVariable, false ); m_nVecUniqueList.push_back( nUniqueIndex ); } return true; } #define _BAN_COPY_CONSTRUCT bool CSignalItem::ExportHeader( FILE *fp, int& nUsingBuffCount, int& nUsingBuffCount64 ) { CString szStructName; szStructName.Format( "struct %sStruct : public TBoostMemoryPool< %sStruct > {\n", m_szName, m_szName ); fprintf( fp, szStructName ); DWORD dwCurCount = 0; int nReserveSize = 256; int nReserveSize64 = 512; int nInitReserveSize = nReserveSize; int nInitReserveSize64 = nReserveSize64; int nCurReserveCount = 0; CString szVarStr; CString szString; int nReserveStrCount = 1; for( DWORD i=0; iGetType() ) { case CUnionValueProperty::Integer: case CUnionValueProperty::Integer_Combo: case CUnionValueProperty::Color: szVarStr = "int "; nReserveSize64 -= 4; break; case CUnionValueProperty::Float: szVarStr = "float "; nReserveSize64 -= 4; break; case CUnionValueProperty::Vector2: szVarStr = "EtVector2 *"; nReserveSize64 -= 8; break; case CUnionValueProperty::Vector3: szVarStr = "EtVector3 *"; nReserveSize64 -= 8; break; case CUnionValueProperty::Vector4: case CUnionValueProperty::Vector4Color: szVarStr = "EtVector4 *"; nReserveSize64 -= 8; break; case CUnionValueProperty::String: case CUnionValueProperty::String_FileOpen: szVarStr = "char *"; nReserveSize64 -= 8; break; case CUnionValueProperty::Boolean: szVarStr = "BOOL "; nReserveSize64 -= 4; break; case CUnionValueProperty::Pointer: { CString szStr = m_pVecList[i]->GetSubDescription(); const char *szValueData; szValueData = _GetSubStrByCount( 1, szStr.GetBuffer(), '|' ); if( !szValueData ) szValueData = "void *"; szVarStr = szValueData; szVarStr += " "; nReserveSize64 -= 8; } break; } nReserveSize -= 4; szString.Format( " %s%s;\n", szVarStr, m_pVecList[i]->GetDescription() ); fprintf( fp, szString ); dwCurCount++; } nUsingBuffCount = (nInitReserveSize - nReserveSize) / 4; nUsingBuffCount64 = (nInitReserveSize64 - nReserveSize64) / 4; szString.Format( " char cReserved%d[%d];\n", nReserveStrCount, nReserveSize ); fprintf( fp, szString ); #ifdef _BAN_COPY_CONSTRUCT szString.Format( "\nprivate:\n\t%sStruct(const %sStruct&);\n\tconst %sStruct& operator=(const %sStruct&);\n\npublic:\n\t%sStruct() {}\n", m_szName, m_szName, m_szName, m_szName, m_szName ); fprintf( fp, szString ); #endif szStructName.Format( "};\n\n", m_szName ); fprintf( fp, szStructName ); return true; }