[C++应用程序性能优化]动态数组——摄像机
2012-12-30 14:00
369 查看
CamBlock.h #define MAX_LENGTH 1000 #define MAX_FRAMES 256 typedef struct _Frame { unsigned short idcamera; unsigned long length; unsigned short width; unsigned short height; unsigned char* data; }Frame; class CamBlock { public: CamBlock(int id, unsigned long len, unsigned short numframes) : _data(NULL), _length(0), _idcam(-1), _numframes(0) { if (len > MAX_LENGTH || numframes> MAX_FRAMES) throw; try { _frameindex = new Frame[numframes]; _data = new unsigned char[len]; }catch(...) { throw; } memset(_data, 0, len); _length = len; _idcam = id; _numframes = numframes; } ~CamBlock() { delete []_data; delete []_frameindex; } bool SaveFrame(const Frame* frame); bool ReadFrame(Frame* frame); protected: private: Frame* _frameindex; unsigned char* _data; unsigned long _length; int _idcam; unsigned short _numframes; unsigned long _framepos; }; CameraArray.h #define MAX_CAMERAS 256 #define MAX_INCREMENT 100 class CameraArray { typedef CamBlock* PtrBlock; PtrBlock* camera_bufs; unsigned short camera_num; unsigned short max_num; unsigned short inc_num; public: CameraArray(unsigned short max, unsigned short inc); ~CameraArray(); CamBlock* InsertBlock(unsigned short idcam, unsigned long size, unsigned short numframes); bool RemoveBlock(unsigned short idcam); private: unsigned short GetPosition(unsigned short idcam); }; CameraArray.cpp #include "CameraArray.h" CameraArray::CameraArray(unsigned short max, unsigned short inc) : camera_bufs(NULL), max_num(0), inc_num(0), camera_num(0) { if (max > MAX_CAMERAS || inc > MAX_INCREMENT) throw; try { camera_bufs = new PtrBlock[max]; }catch(...) { throw; } max_num = max; inc_num = inc; } CameraArray::~CameraArray() { for (unsigned short i = 0; i < camera_num; i++) { delete camera_bufs[i]; } delete []camera_bufs; } CamBlock* CameraArray::InsertBlock(unsigned short idcam, unsigned long size, unsigned short numframes) { unsigned short pos = GetPosition(idcam); if (camera_num == max_num) { PtrBlock* newbufs = NULL; try{ newbufs = new PtrBlock[max_num + inc_num]; }catch(...){ throw; } memccpy(newbufs, camera_bufs, max_num*sizeof(PtrBlock)); delete []camera_bufs; max_num += inc_num; camera_bufs = newbufs; } if (pos != camera_num) { memmove(camera_bufs + pos + 1, camera_bufs + pos, (camera_num-pos)*sizeof(PtrBlock)); } ++camera_num; CamBlock* newblock = new CamBlock(idcam, size, numframes); camera_bufs[pos] = newblock; return camera_bufs[pos]; } bool CameraArray::RemoveBlock(unsigned short idcam) { unsigned short pos = GetPosition(idcam); if (camera_num < 1) { return false; } camera_num--; PtrBlock delblock = camera_bufs[pos]; delete delblock; if (pos != camera_num) { memmove(camera_bufs + pos, camera_bufs + pos + 1, (camera_num - pos)*sizeof(PtrBlock)); } if (max_num - camera_num > inc_num) { unsigned short len = ((camera_num/inc_num)+1)*inc_num; PtrBlock* newbufs = NULL; try{ newbufs = new PtrBlock[len]; }catch(...) { throw; } memcpy(newbufs, camera_bufs, camera_num*sizeof(PtrBlock)); delete[] camera_bufs; camera_bufs = newbufs; max_num = len; } return true; }
相关文章推荐
- C++ 应用程序性能优化 -- 内存池
- C++应用程序性能与优化--chapter 7
- 【读书笔记 c++应用程序性能优化】c++对象说明
- C++ 应用程序性能优化--第 2 章:C++ 语言特性的性能分析
- C++ 应用程序性能优化
- [C++应用程序性能优化]operator+,ecxipcit
- C++ 应用程序性能优化:内存池
- C++ 应用程序性能优化
- C++ 应用程序性能优化
- [C++应用程序性能优化]临时对象
- [C++应用程序性能优化]列表初始化和构造函数内初始化
- C++ 应用程序性能优化,第 6 章:内存池
- [C++应用程序性能优化]单继承
- C++ 应用程序性能优化,第 6 章:内存池
- C++ 应用程序性能优化---内存池技术
- [C++应用程序性能优化]对象的生命周期
- [C++应用程序性能优化]程序使用内存区
- C++应用程序性能优化之内存池
- [转]C++ 应用程序性能优化----内存池
- 【编程语言】C++应用程序性能优化 笔记(一)