Skip to content

Commit

Permalink
alloc infrastructure added
Browse files Browse the repository at this point in the history
  • Loading branch information
soniccat committed Jan 16, 2010
1 parent 62ee6ac commit c039253
Show file tree
Hide file tree
Showing 23 changed files with 305 additions and 234 deletions.
Binary file modified Docs/codeStyleGide.rtf
Binary file not shown.
2 changes: 1 addition & 1 deletion src/3D/SEMaterial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ void SEMaterial::ParseData( SESceneLoader* loader )

}else if( streq( loader->dataType(), "texture") )
{
SETexturePtr texture = SETexturePtr( new SETexture );
SETexturePtr texture = SETexturePtr( SENewObject<SETexture>() );
SetTexture( texture );

loader->AddDelegate( texture );
Expand Down
17 changes: 6 additions & 11 deletions src/3D/SEMesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ SEMesh::~SEMesh(void)
BREAKPOINTPLACE;
}

SEVertexArrayPtr SEMesh::vertexArray()
SEVertexNativeArrayPtr SEMesh::vertexArray()
{
return mVertexArray;
}
Expand All @@ -35,13 +35,9 @@ void SEMesh::SetVertexArrayCount( int count )
{
SEAssert( mVertexArray.get() == 0, "not allocated check" );
mVertexArraySize = count*3;
mVertexArray = SEVertexArrayPtr( new float[count*3] );
mNormalArray = SENormalArrayPtr( new float[count*3] );

float* uvArr = new float[count*3];
memset( uvArr, 0, sizeof(float)*count*3);

mUVArray = SEUVArrayPtr( uvArr );
mVertexArray = SEVertexNativeArrayPtr( SENewArray<float>(count*3) );
mNormalArray = SENormalNativeArrayPtr( SENewArray<float>(count*3) );
mUVArray = SEUVNativeArrayPtr( SENewArray<float>(count*3) );
}

void SEMesh::SetVertex( int index, float x, float y, float z)
Expand Down Expand Up @@ -103,8 +99,7 @@ void SEMesh::ParseData( SESceneLoader* loader )

}else if( streq( loader->dataType(), "vertexGroup" ) )
{
SEVertexGroupPtr vertexGroup( new SEVertexGroup( loader->value1() ) );
//vertexGroup->SetName( loader->value1() );
SEVertexGroupPtr vertexGroup( SENewObject<SEVertexGroup>( loader->value1() ) );
AddVertexGroup( vertexGroup );

loader->AddDelegate( vertexGroup );
Expand Down Expand Up @@ -145,7 +140,7 @@ void SEMesh::Draw()
SEVertexGroupArray::iterator start = mVertexGroupArray.begin();
SEVertexGroupArray::iterator end = mVertexGroupArray.end();

SEIndexArrayPtr indexArrayPtr;
SEIndexNativeArrayPtr indexArrayPtr;

//FIXME: move that part or reorganize
glEnable( GL_LIGHTING );
Expand Down
14 changes: 7 additions & 7 deletions src/3D/SEMesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,26 @@ class SESceneLoader;

typedef shared_ptr<SEMesh> SEMeshPtr;
typedef vector< SEMeshPtr, SEAllocator<SEMeshPtr> > SEMeshArray;
typedef shared_array<float> SEVertexArrayPtr;
typedef shared_array<float> SENormalArrayPtr;
typedef shared_array<float> SEUVArrayPtr;
typedef shared_array<float> SEVertexNativeArrayPtr;
typedef shared_array<float> SENormalNativeArrayPtr;
typedef shared_array<float> SEUVNativeArrayPtr;

class SEMesh: public SESceneLoaderDelegate
{
SEString mName;

int mVertexArraySize;
SEVertexArrayPtr mVertexArray;
SENormalArrayPtr mNormalArray;
SEUVArrayPtr mUVArray;
SEVertexNativeArrayPtr mVertexArray;
SENormalNativeArrayPtr mNormalArray;
SEUVNativeArrayPtr mUVArray;

SEVertexGroupArray mVertexGroupArray;

public:
SEMesh(void);
~SEMesh(void);

SEVertexArrayPtr vertexArray();
SEVertexNativeArrayPtr vertexArray();

void SetName( const char* name );
const SEString& name();
Expand Down
10 changes: 5 additions & 5 deletions src/3D/SEVertexGroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ SEVertexGroup::~SEVertexGroup(void)
BREAKPOINTPLACE;
}

void SEVertexGroup::Init( SEIndexArrayPtr indexArray, int size )
void SEVertexGroup::Init( SEIndexNativeArrayPtr indexArray, int size )
{
SEAssert( mIndexArraySize == -1, "Object already inited" );

mIndexArray = indexArray;
mIndexArraySize = size;
}

SEIndexArrayPtr SEVertexGroup::indexArray()
SEIndexNativeArrayPtr SEVertexGroup::indexArray()
{
return mIndexArray;
}
Expand All @@ -31,7 +31,7 @@ int SEVertexGroup::indexArraySize()
return mIndexArraySize;
}

void SEVertexGroup::SetFace( int index, float v1, float v2, float v3)
void SEVertexGroup::SetFace( int index, SEIndexType v1, SEIndexType v2, SEIndexType v3)
{
SEAssert( index*3 < mIndexArraySize, "Vertex index bound check" );

Expand Down Expand Up @@ -64,12 +64,12 @@ void SEVertexGroup::ParseData( SESceneLoader* loader )
int size = atoi( loader->value1() );
SEAssert( size > 0, "vertexIndexCount value check" );

SEIndexArrayPtr arrayPtr( new unsigned short[ size*3 ] );
SEIndexNativeArrayPtr arrayPtr( SENewArray<SEIndexType>( size*3 ) );
Init( arrayPtr, size*3 );

}else if( streq( loader->dataType(), "material" ) )
{
SEMaterialPtr material( new SEMaterial( loader->value1() ) );
SEMaterialPtr material( SENewObject<SEMaterial>( loader->value1() ) );
SetMaterial( material );

loader->AddDelegate( material );
Expand Down
11 changes: 6 additions & 5 deletions src/3D/SEVertexGroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,27 @@

class SEVertexGroup;

typedef shared_array<unsigned short> SEIndexArrayPtr;
typedef unsigned short SEIndexType;
typedef shared_array<SEIndexType> SEIndexNativeArrayPtr;
typedef shared_ptr<SEVertexGroup> SEVertexGroupPtr;
typedef vector< SEVertexGroupPtr, SEAllocator<SEVertexGroupPtr> > SEVertexGroupArray;

class SEVertexGroup: public SESceneLoaderDelegate
{
SEString mName;
int mIndexArraySize;
SEIndexArrayPtr mIndexArray;
SEIndexNativeArrayPtr mIndexArray;
SEMaterialPtr mMaterial;

public:
SEVertexGroup(const char* name);
~SEVertexGroup(void);

void Init( SEIndexArrayPtr indexArray, int size );
SEIndexArrayPtr indexArray();
void Init( SEIndexNativeArrayPtr indexArray, int size );
SEIndexNativeArrayPtr indexArray();
int indexArraySize();

void SetFace( int index, float v1, float v2, float v3);
void SetFace( int index, SEIndexType v1, SEIndexType v2, SEIndexType v3);
void SetMaterial( SEMaterialPtr material );
SEMaterialPtr material();

Expand Down
2 changes: 1 addition & 1 deletion src/Images/SEJpegImage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ void SEJpegImage::Load( const sechar* filePath )

jpeg_read_scanlines( &cinfo, &row, 1 );

printf("%d %d %d %d", row[0], row[1], row[2], row[3] );
//printf("%d %d %d %d", row[0], row[1], row[2], row[3] );
}

mData = SEImageDataPtr( buffer );
Expand Down
3 changes: 2 additions & 1 deletion src/Tools/SEAllocator.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ class SEAllocator
SEAllocator& operator=(const SEAllocator<U>&) { return *this; }
};

//operators ( ==, != ) added to resolve iPhone compiler error:
//basic_string.h:213: error: no match for 'operator==' in '__alloc1 == __alloc2

//operators ( ==, != ) added to resolve iPhone compiler error:
template<typename _T1, typename _T2>
inline bool
operator==(const SEAllocator<_T1>&, const SEAllocator<_T2>&)
Expand All @@ -75,4 +75,5 @@ inline bool
operator!=(const SEAllocator<_T1>&, const SEAllocator<_T2>&)
{ return false; }


#endif SEAllocator_H
2 changes: 1 addition & 1 deletion src/Tools/SEDefinition.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ typedef basic_string<sechar, char_traits<sechar> , SEAllocator<sechar> > SEStrin
typedef shared_ptr<SEString> SEStringPtr;
typedef vector<SEString,SEAllocator<SEString>> SEStringArray;

typedef shared_array<SEString> SEStringNativeArray;
typedef shared_array<SEString> SEStringNativeArrayPtr;
76 changes: 38 additions & 38 deletions src/Tools/SEFileLineReader.cpp
Original file line number Diff line number Diff line change
@@ -1,39 +1,39 @@
#include "SEFileLineReader.h"

SEFileLineReader::SEFileLineReader(void)
{
lastEndOfLineIndex = 0;
}

SEFileLineReader::~SEFileLineReader(void)
{
}

void SEFileLineReader::HandleString(const sechar* string, bool isEndOfFile)
{
//split string
stringBuffer.append( string );

int currentEndOfLineIndex = lastEndOfLineIndex;
SEString substring;

while( true )
{
currentEndOfLineIndex = stringBuffer.find( "\n", currentEndOfLineIndex+1 );
if( currentEndOfLineIndex == string::npos && !isEndOfFile )
{
//substring = stringBuffer.substr( lastEndOfLineIndex, stringBuffer.length() - 1 - lastEndOfLineIndex );
//mHandler->HandleString( substring.c_str(), isEndOfFile );
break;

}else if( currentEndOfLineIndex != string::npos )
{
substring = stringBuffer.substr( lastEndOfLineIndex, currentEndOfLineIndex-lastEndOfLineIndex );

lastEndOfLineIndex = currentEndOfLineIndex;
mHandler->HandleString( substring.c_str(), isEndOfFile );

}else
break;
}
#include "SEFileLineReader.h"

SEFileLineReader::SEFileLineReader(void)
{
lastEndOfLineIndex = 0;
}

SEFileLineReader::~SEFileLineReader(void)
{
}

void SEFileLineReader::HandleString(const sechar* string, bool isEndOfFile)
{
//split string
stringBuffer.append( string );

int currentEndOfLineIndex = lastEndOfLineIndex;
SEString substring;

while( true )
{
currentEndOfLineIndex = stringBuffer.find( "\n", currentEndOfLineIndex+1 );
if( currentEndOfLineIndex == string::npos && !isEndOfFile )
{
//substring = stringBuffer.substr( lastEndOfLineIndex, stringBuffer.length() - 1 - lastEndOfLineIndex );
//mHandler->HandleString( substring.c_str(), isEndOfFile );
break;

}else if( currentEndOfLineIndex != string::npos )
{
substring = stringBuffer.substr( lastEndOfLineIndex, currentEndOfLineIndex-lastEndOfLineIndex );

lastEndOfLineIndex = currentEndOfLineIndex;
mDelegate->HandleString( substring.c_str(), isEndOfFile );

}else
break;
}
}
120 changes: 61 additions & 59 deletions src/Tools/SEFileReaderBase.cpp
Original file line number Diff line number Diff line change
@@ -1,59 +1,61 @@
#include "SEFileReaderBase.h"
#include "SEPathBase.h"

#define SEFILEREADER_BUFFER_LENGHT 1024

SEFileReaderBase::SEFileReaderBase(void)
{
}

SEFileReaderBase::~SEFileReaderBase(void)
{
Close();
}

void SEFileReaderBase::Load(const SEPathBase* filePath)
{
Close();
mCurrentFile = filePath;

sechar buffer[SEFILEREADER_BUFFER_LENGHT];
TRACE( filePath->cString() );

FILE* file = fopen(filePath->cString(), "r");
int feofFlag = feof(file);

while( feofFlag == 0 )
{
memset(buffer,0,sizeof(buffer));

//fgets( buffer, SEWindowsFileReader_BUFFER_LENGHT-1, file );
fread(buffer, SEFILEREADER_BUFFER_LENGHT-1, 1, file);

feofFlag = feof(file);
HandleString( buffer, static_cast<bool>( feofFlag != 0 ) );
}

fclose(file);
}

void SEFileReaderBase::Close()
{
mCurrentFile = NULL;
}

void SEFileReaderBase::HandleString(const sechar* string, bool isEndOfFile)
{
if( mHandler )
mHandler->HandleString(string, isEndOfFile);
}

void SEFileReaderBase::SetHandler( SEFileReaderHandlerInterface* _handler )
{
mHandler = _handler;
}

SEFileReaderHandlerInterface* SEFileReaderBase::handler()
{
return mHandler;
}
#include "SEFileReaderBase.h"
#include "SEPathBase.h"

#define SEFILEREADER_BUFFER_LENGHT 1024

SEFileReaderBase::SEFileReaderBase(void)
{
}

SEFileReaderBase::~SEFileReaderBase(void)
{
Close();
}

void SEFileReaderBase::Load(const SEPathBase* filePath)
{
Close();
mCurrentFile = filePath;

sechar buffer[SEFILEREADER_BUFFER_LENGHT];
TRACE( filePath->cString() );

FILE* file = fopen(filePath->cString(), "r");
SEAssert(file!=0, "file not open");

int feofFlag = feof(file);

while( feofFlag == 0 )
{
memset(buffer,0,sizeof(buffer));

//fgets( buffer, SEWindowsFileReader_BUFFER_LENGHT-1, file );
fread(buffer, SEFILEREADER_BUFFER_LENGHT-1, 1, file);

feofFlag = feof(file);
HandleString( buffer, static_cast<bool>( feofFlag != 0 ) );
}

fclose(file);
}

void SEFileReaderBase::Close()
{
mCurrentFile = NULL;
}

void SEFileReaderBase::HandleString(const sechar* string, bool isEndOfFile)
{
if( mDelegate )
mDelegate->HandleString(string, isEndOfFile);
}

void SEFileReaderBase::SetDelegate( SEFileReaderDelegate* _delegate )
{
mDelegate = _delegate;
}

SEFileReaderDelegate* SEFileReaderBase::delegate()
{
return mDelegate;
}
Loading

0 comments on commit c039253

Please sign in to comment.