aboutsummaryrefslogtreecommitdiff
path: root/sp/src/public/dmxloader/dmxattribute.h
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /sp/src/public/dmxloader/dmxattribute.h
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/public/dmxloader/dmxattribute.h')
-rw-r--r--sp/src/public/dmxloader/dmxattribute.h183
1 files changed, 183 insertions, 0 deletions
diff --git a/sp/src/public/dmxloader/dmxattribute.h b/sp/src/public/dmxloader/dmxattribute.h
new file mode 100644
index 00000000..63bd58d8
--- /dev/null
+++ b/sp/src/public/dmxloader/dmxattribute.h
@@ -0,0 +1,183 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef DMXATTRIBUTE_H
+#define DMXATTRIBUTE_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "datamodel/dmattributetypes.h"
+#include "tier1/utlvector.h"
+#include "tier1/utlrbtree.h"
+#include "tier1/utlsymbol.h"
+#include "tier1/mempool.h"
+#include "dmxloader/dmxloader.h"
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations:
+//-----------------------------------------------------------------------------
+class CDmxElement;
+
+
+//-----------------------------------------------------------------------------
+// Attribute info, modified for use in mod code
+//-----------------------------------------------------------------------------
+DECLARE_ATTRIBUTE_TYPE( CDmxElement*, AT_ELEMENT, "element", value = 0; )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( CDmxElement*, AT_ELEMENT_ARRAY, "element_array" )
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+class CDmxAttribute
+{
+ DECLARE_DMX_ALLOCATOR( );
+
+public:
+ // Returns attribute name and type
+ DmAttributeType_t GetType() const;
+ const char *GetTypeString() const;
+ template< class T > bool IsA() const;
+
+ // Returns the name. NOTE: The utlsymbol
+ // can be turned into a string by using g_pDataModel->String();
+ const char *GetName() const;
+ CUtlSymbol GetNameSymbol() const;
+ void SetName( const char *pName );
+
+ // Gets values
+ template< class T > const T& GetValue( ) const;
+ template< class T > const CUtlVector< T >& GetArray( ) const;
+ const char *GetValueString() const;
+
+ // Sets values (+ type)
+ template< class T > void SetValue( const T& value );
+ void SetValue( const char *pString );
+ void SetValue( const void *pBuffer, size_t nLen );
+ void SetValue( const CDmxAttribute *pAttribute );
+
+ // Method to set values in an array (just directly operate on the array)
+ // NOTE: This will create a new array of the appropriate type if
+ // the type doesn't match the current type
+ template< class T > CUtlVector< T >& GetArrayForEdit();
+
+ // Sets the attribute to its default value based on its type
+ void SetToDefaultValue();
+
+ // Convert to and from string
+ void SetValueFromString( const char *pValue );
+ const char *GetValueAsString( char *pBuffer, size_t nBufLen ) const;
+
+ // Gets the size of an array, returns 0 if it's not an array type
+ int GetArrayCount() const;
+
+ // Read from file
+ bool Unserialize( DmAttributeType_t type, CUtlBuffer &buf );
+ bool UnserializeElement( DmAttributeType_t type, CUtlBuffer &buf );
+ bool Serialize( CUtlBuffer &buf ) const;
+ bool SerializeElement( int nIndex, CUtlBuffer &buf ) const;
+ bool SerializesOnMultipleLines() const;
+
+ // Returns the size of the variables storing the various attribute types
+ static int AttributeDataSize( DmAttributeType_t type );
+
+private:
+ CDmxAttribute( const char *pAttributeName );
+ CDmxAttribute( CUtlSymbol attributeName );
+ ~CDmxAttribute();
+
+ // Allocate, free memory for data
+ void AllocateDataMemory( DmAttributeType_t type );
+ void FreeDataMemory( );
+
+ // Untyped method for setting used by unpack
+ void SetValue( DmAttributeType_t type, const void *pSrc, int nLen );
+
+ DmAttributeType_t m_Type;
+ CUtlSymbol m_Name;
+ void *m_pData;
+
+ static CUtlSymbolTableMT s_AttributeNameSymbols;
+
+ friend class CDmxElement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Inline methods
+//-----------------------------------------------------------------------------
+inline DmAttributeType_t CDmxAttribute::GetType() const
+{
+ return m_Type;
+}
+
+template< class T > inline bool CDmxAttribute::IsA() const
+{
+ return GetType() == CDmAttributeInfo< T >::ATTRIBUTE_TYPE;
+}
+
+inline CUtlSymbol CDmxAttribute::GetNameSymbol() const
+{
+ return m_Name;
+}
+
+
+//-----------------------------------------------------------------------------
+// Sets a value in the attribute
+//-----------------------------------------------------------------------------
+template< class T > void CDmxAttribute::SetValue( const T& value )
+{
+ AllocateDataMemory( CDmAttributeInfo<T>::AttributeType() );
+ CopyConstruct( (T*)m_pData, value );
+}
+
+
+//-----------------------------------------------------------------------------
+// Returns data in the attribute
+//-----------------------------------------------------------------------------
+inline const char *CDmxAttribute::GetValueString() const
+{
+ if ( m_Type == AT_STRING )
+ return *(CUtlString*)m_pData;
+ return "";
+}
+
+template< class T >
+inline const T& CDmxAttribute::GetValue( ) const
+{
+ if ( CDmAttributeInfo<T>::AttributeType() == m_Type )
+ return *(T*)m_pData;
+
+ static T defaultValue;
+ CDmAttributeInfo<T>::SetDefaultValue( defaultValue );
+ return defaultValue;
+}
+
+template< class T >
+inline const CUtlVector< T >& CDmxAttribute::GetArray( ) const
+{
+ if ( CDmAttributeInfo< CUtlVector< T > >::AttributeType() == m_Type )
+ return *( CUtlVector< T > *)m_pData;
+
+ static CUtlVector<T> defaultArray;
+ return defaultArray;
+}
+
+template< class T >
+inline CUtlVector< T >& CDmxAttribute::GetArrayForEdit( )
+{
+ if ( CDmAttributeInfo< CUtlVector< T > >::AttributeType() == m_Type )
+ return *( CUtlVector< T > *)m_pData;
+
+ AllocateDataMemory( CDmAttributeInfo< CUtlVector< T > >::AttributeType() );
+ Construct( (CUtlVector<T>*)m_pData );
+ return *(CUtlVector< T > *)m_pData;
+}
+
+#endif // DMXATTRIBUTE_H