file_ansi.cpp

Go to the documentation of this file.
00001 #include <stdio.h>
00002 #include "debug.h"
00003 #include "default_file.h"
00004 
00005 
00006 namespace audiere {
00007 
00008   class CFile : public RefImplementation<File> {
00009   public:
00010     CFile(FILE* file) {
00011       ADR_ASSERT(file, "FILE* handle not valid");
00012       m_file = file;
00013     }
00014 
00015     ~CFile() {
00016       fclose(m_file);
00017     }
00018 
00019     int ADR_CALL read(void* buffer, int size) {
00020       ADR_ASSERT(buffer, "buffer pointer not valid");
00021       ADR_ASSERT(size >= 0, "can't read negative number of bytes");
00022       return fread(buffer, 1, size, m_file);
00023     }
00024 
00025     bool ADR_CALL seek(int position, SeekMode mode) {
00026       int m;
00027       switch (mode) {
00028         case BEGIN:   m = SEEK_SET; break;
00029         case CURRENT: m = SEEK_CUR; break;
00030         case END:     m = SEEK_END; break;
00031         default: return false;
00032       }
00033 
00034       return (fseek(m_file, position, m) == 0);
00035     }
00036 
00037     int ADR_CALL tell() {
00038       return ftell(m_file);
00039     }
00040 
00041   private:
00042     FILE* m_file;
00043   };
00044 
00045 
00046   ADR_EXPORT(File*) AdrOpenFile(const char* filename, bool writeable) {
00047     FILE* file = fopen(filename, writeable ? "wb" : "rb");
00048     return (file ? new CFile(file) : 0);
00049   }
00050 
00051 }

Generated on Mon Feb 13 23:07:46 2006 for audiere by  doxygen 1.4.6