14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 24f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. 34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file. 54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 74f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#ifndef _MMAP_INCLUDED_ 84f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#define _MMAP_INCLUDED_ 94f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Encapsulate memory mapped files 124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass TMMap { 154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.compublic: 164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com TMMap(const char* fileName) : 174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com fSize(-1), // -1 is the error value returned by GetFileSize() 184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com fp(NULL), 194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com fBuff(0) // 0 is the error value returned by MapViewOfFile() 204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if ((fp = fopen(fileName, "r")) == NULL) 224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return; 234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com char c = getc(fp); 244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com fSize = 0; 254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com while (c != EOF) { 264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com fSize++; 274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com c = getc(fp); 284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (c == EOF) 304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com fSize++; 314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com rewind(fp); 324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com fBuff = (char*)malloc(sizeof(char) * fSize); 334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com int count = 0; 344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com c = getc(fp); 354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com while (c != EOF) { 364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com fBuff[count++] = c; 374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com c = getc(fp); 384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com fBuff[count++] = c; 404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com char* getData() { return fBuff; } 434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com int getSize() { return fSize; } 444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com ~TMMap() { 464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (fp != NULL) 474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com fclose(fp); 484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comprivate: 514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com int fSize; // size of file to map in 524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com FILE *fp; 534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com char* fBuff; // the actual data; 544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}; 554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#endif // _MMAP_INCLUDED_ 57