Home | History | Annotate | Download | only in compiler
      1 //
      2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 #ifndef _MMAP_INCLUDED_
      8 #define _MMAP_INCLUDED_
      9 
     10 //
     11 // Encapsulate memory mapped files
     12 //
     13 
     14 class TMMap {
     15 public:
     16     TMMap(const char* fileName) :
     17         fSize(-1), // -1 is the error value returned by GetFileSize()
     18         fp(NULL),
     19         fBuff(0)   // 0 is the error value returned by MapViewOfFile()
     20     {
     21         if ((fp = fopen(fileName, "r")) == NULL)
     22             return;
     23         char c = getc(fp);
     24         fSize = 0;
     25         while (c != EOF) {
     26             fSize++;
     27             c = getc(fp);
     28         }
     29         if (c == EOF)
     30             fSize++;
     31         rewind(fp);
     32         fBuff = (char*)malloc(sizeof(char) * fSize);
     33         int count = 0;
     34         c = getc(fp);
     35         while (c != EOF) {
     36             fBuff[count++] = c;
     37             c = getc(fp);
     38         }
     39         fBuff[count++] = c;
     40     }
     41 
     42     char* getData() { return fBuff; }
     43     int   getSize() { return fSize; }
     44 
     45     ~TMMap() {
     46         if (fp != NULL)
     47             fclose(fp);
     48     }
     49 
     50 private:
     51     int             fSize;      // size of file to map in
     52     FILE *fp;
     53     char*           fBuff;      // the actual data;
     54 };
     55 
     56 #endif // _MMAP_INCLUDED_
     57