From 9debf26d816dcd36291781dec97d44d3f3e8334b Mon Sep 17 00:00:00 2001 From: gered Date: Sun, 24 Apr 2011 19:30:07 -0400 Subject: [PATCH] use std::vector instead of manually managing arrays for repeated chunk data --- MeshConverter/src/chunks/chunks.cpp | 25 +++++++++++++++---------- MeshConverter/src/chunks/materials.h | 18 ++++++------------ MeshConverter/src/chunks/normals.h | 18 ++++++------------ MeshConverter/src/chunks/texcoords.h | 18 ++++++------------ MeshConverter/src/chunks/triangles.h | 18 ++++++------------ MeshConverter/src/chunks/vertices.h | 18 ++++++------------ 6 files changed, 45 insertions(+), 70 deletions(-) diff --git a/MeshConverter/src/chunks/chunks.cpp b/MeshConverter/src/chunks/chunks.cpp index 1b540ba..6c60222 100644 --- a/MeshConverter/src/chunks/chunks.cpp +++ b/MeshConverter/src/chunks/chunks.cpp @@ -15,9 +15,10 @@ void WriteChunk(VerticesChunk *chunk, FILE *fp) fputs("VTX", fp); fwrite(&size, 4, 1, fp); - fwrite(&chunk->count, 4, 1, fp); + uint32_t count = chunk->GetCount(); + fwrite(&count, 4, 1, fp); - for (uint32_t i = 0; i < chunk->count; ++i) + for (uint32_t i = 0; i < count; ++i) { fwrite(&chunk->vertices[i].x, sizeof(float), 1, fp); fwrite(&chunk->vertices[i].y, sizeof(float), 1, fp); @@ -33,9 +34,10 @@ void WriteChunk(NormalsChunk *chunk, FILE *fp) fputs("NRL", fp); fwrite(&size, 4, 1, fp); - fwrite(&chunk->count, 4, 1, fp); + uint32_t count = chunk->GetCount(); + fwrite(&count, 4, 1, fp); - for (uint32_t i = 0; i < chunk->count; ++i) + for (uint32_t i = 0; i < count; ++i) { fwrite(&chunk->normals[i].x, sizeof(float), 1, fp); fwrite(&chunk->normals[i].y, sizeof(float), 1, fp); @@ -51,9 +53,10 @@ void WriteChunk(TexCoordsChunk *chunk, FILE *fp) fputs("TXT", fp); fwrite(&size, 4, 1, fp); - fwrite(&chunk->count, 4, 1, fp); + uint32_t count = chunk->GetCount(); + fwrite(&count, 4, 1, fp); - for (uint32_t i = 0; i < chunk->count; ++i) + for (uint32_t i = 0; i < count; ++i) { fwrite(&chunk->texCoords[i].x, sizeof(float), 1, fp); fwrite(&chunk->texCoords[i].y, sizeof(float), 1, fp); @@ -68,9 +71,10 @@ void WriteChunk(MaterialsChunk *chunk, FILE *fp) fputs("MTL", fp); fwrite(&size, 4, 1, fp); - fwrite(&chunk->count, 4, 1, fp); + uint32_t count = chunk->GetCount(); + fwrite(&count, 4, 1, fp); - for (uint32_t i = 0; i < chunk->count; ++i) + for (uint32_t i = 0; i < count; ++i) { Material *m = &chunk->materials[i]; @@ -112,9 +116,10 @@ void WriteChunk(TrianglesChunk *chunk, FILE *fp) fputs("TRI", fp); fwrite(&size, 4, 1, fp); - fwrite(&chunk->count, 4, 1, fp); + uint32_t count = chunk->GetCount(); + fwrite(&count, 4, 1, fp); - for (uint32_t i = 0; i < chunk->count; ++i) + for (uint32_t i = 0; i < count; ++i) { Triangle *t = &chunk->triangles[i]; diff --git a/MeshConverter/src/chunks/materials.h b/MeshConverter/src/chunks/materials.h index 81d6fe1..346baaa 100644 --- a/MeshConverter/src/chunks/materials.h +++ b/MeshConverter/src/chunks/materials.h @@ -3,30 +3,24 @@ #include "../common.h" #include "../assets/material.h" +#include struct MaterialsChunk { - uint32_t count; - Material *materials; + std::vector materials; - MaterialsChunk() + uint32_t GetCount() { - count = 0; - materials = NULL; - } - - ~MaterialsChunk() - { - SAFE_DELETE_ARRAY(materials); + return materials.size(); } uint32_t GetSize() { - if (count == 0) + if (materials.size() == 0) return 0; uint32_t size = sizeof(uint32_t); - for (uint32_t i = 0; i < count; ++i) + for (uint32_t i = 0; i < materials.size(); ++i) { size += materials[i].name.length() + 1; // include null terminator size += sizeof(float) * 4; // ambient diff --git a/MeshConverter/src/chunks/normals.h b/MeshConverter/src/chunks/normals.h index a954c4a..d7af0c6 100644 --- a/MeshConverter/src/chunks/normals.h +++ b/MeshConverter/src/chunks/normals.h @@ -3,32 +3,26 @@ #include "../common.h" #include "../geometry/vector3.h" +#include struct NormalsChunk { - uint32_t count; - Vector3 *normals; + std::vector normals; - NormalsChunk() + uint32_t GetCount() { - count = 0; - normals = NULL; - } - - ~NormalsChunk() - { - SAFE_DELETE_ARRAY(normals); + return normals.size(); } uint32_t GetSize() { - if (count == 0) + if (normals.size() == 0) return 0; uint32_t size = sizeof(uint32_t); size += (sizeof(float) * 3) // x, y, z - * count; + * normals.size(); return size; } diff --git a/MeshConverter/src/chunks/texcoords.h b/MeshConverter/src/chunks/texcoords.h index ce8cfc3..42f75f9 100644 --- a/MeshConverter/src/chunks/texcoords.h +++ b/MeshConverter/src/chunks/texcoords.h @@ -3,32 +3,26 @@ #include "../common.h" #include "../geometry/vector2.h" +#include struct TexCoordsChunk { - uint32_t count; - Vector2 *texCoords; + std::vector texCoords; - TexCoordsChunk() + uint32_t GetCount() { - count = 0; - texCoords = NULL; - } - - ~TexCoordsChunk() - { - SAFE_DELETE_ARRAY(texCoords); + return texCoords.size(); } uint32_t GetSize() { - if (count == 0) + if (texCoords.size() == 0) return 0; uint32_t size = sizeof(uint32_t); size += (sizeof(float) * 2) // u, v - * count; + * texCoords.size(); return size; } diff --git a/MeshConverter/src/chunks/triangles.h b/MeshConverter/src/chunks/triangles.h index 5d52f0c..93b677d 100644 --- a/MeshConverter/src/chunks/triangles.h +++ b/MeshConverter/src/chunks/triangles.h @@ -3,26 +3,20 @@ #include "../common.h" #include "../geometry/triangle.h" +#include struct TrianglesChunk { - uint32_t count; - Triangle *triangles; + std::vector triangles; - TrianglesChunk() + uint32_t GetCount() { - count = 0; - triangles = NULL; - } - - ~TrianglesChunk() - { - SAFE_DELETE_ARRAY(triangles); + return triangles.size(); } uint32_t GetSize() { - if (count == 0) + if (triangles.size() == 0) return 0; uint32_t size = sizeof(uint32_t); @@ -32,7 +26,7 @@ struct TrianglesChunk + (sizeof(uint32_t) * 3) // normal indices + (sizeof(uint32_t) * 3) // texcoord indices + sizeof(uint32_t) // material index - ) * count; + ) * triangles.size(); return size; } diff --git a/MeshConverter/src/chunks/vertices.h b/MeshConverter/src/chunks/vertices.h index 8e8dccb..fb8d21c 100644 --- a/MeshConverter/src/chunks/vertices.h +++ b/MeshConverter/src/chunks/vertices.h @@ -3,32 +3,26 @@ #include "../common.h" #include "../geometry/vector3.h" +#include struct VerticesChunk { - uint32_t count; - Vector3 *vertices; + std::vector vertices; - VerticesChunk() + uint32_t GetCount() { - count = 0; - vertices = NULL; - } - - ~VerticesChunk() - { - SAFE_DELETE_ARRAY(vertices); + return vertices.size(); } uint32_t GetSize() { - if (count == 0) + if (vertices.size() == 0) return 0; uint32_t size = sizeof(uint32_t); size += (sizeof(float) * 3) // x, y, z - * count; + * vertices.size(); return size; }