SOL9 2.0 Class: MemoryFile

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * MemoryFile.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL++2000
#pragma once

#include <sol\File.h>


namespace SOL {

class MemoryFile :public File {
private:
    HANDLE    hmap;
    char*    buff;
    BOOL    writable;
    int    size;
  
public:
    MemoryFile()
        :File() 
    { 
        hmap         = NULL;
        buff         = NULL;
        writable     = FALSE;
        size        = 0;
            
    }

public:
    BOOL create(const char* name, BOOL writeFlag, int len) 
    {
        writable = writeFlag;
        size     = len;        
        BOOL result = File::create(name);
        if(result) {
            HANDLE fh = getHandle();
              hmap = ::CreateFileMapping(fh, 
                            0,
                            PAGE_READWRITE,
                            0l, 
                            size,
                            NULL);
            if(hmap) {
                buff = (char*)::MapViewOfFile(hmap, 
                                FILE_MAP_WRITE,
                                0,
                                0,
                                size);    
            }
            if(hmap == NULL || buff == NULL) {
                 result = FALSE;
            }
        }
        return result;
    }

public:
    ~MemoryFile() 
    {
        close();
    }

public:
    void close()
    {
        if(buff) {
            ::UnmapViewOfFile(hmap);
        }
        if(writable) {
             seek(size, FILE_BEGIN);
        }         
        setEnd();
        File::close();
    }


/*
      MemoryFile();
    ~MemoryFile();
    BOOL    create(const char* name, BOOL writeFlag, int len);
    void    close();
*/
};

}


Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.