Panagiotis Christopoulos Charitos 12 лет назад
Родитель
Сommit
b2a3189a19
2 измененных файлов с 37 добавлено и 1 удалено
  1. 4 1
      include/anki/util/Filesystem.h
  2. 33 0
      src/util/Filesystem.cpp

+ 4 - 1
include/anki/util/Filesystem.h

@@ -29,7 +29,7 @@ public:
 	{
 		OF_READ = 1 << 0,
 		OF_WRITE = 1 << 1,
-		OF_APPEND = 1 << 2,
+		OF_APPEND = OF_WRITE | (1 << 2),
 		OF_BINARY = 1 << 3
 	};
 
@@ -50,6 +50,9 @@ public:
 	/// Read data from the file
 	PtrSize read(void* buff, PtrSize size);
 
+	/// Read all the contents of a text file
+	void readAll(std::string& txt);
+
 	/// Write data to the file
 	PtrSize write(void* buff, PtrSize size);
 

+ 33 - 0
src/util/Filesystem.cpp

@@ -89,6 +89,7 @@ PtrSize File::read(void* buff, PtrSize size)
 	ANKI_ASSERT(file);
 	ANKI_ASSERT(buff);
 	ANKI_ASSERT(size > 0);
+	ANKI_ASSERT(openFlags & OF_READ);
 
 	PtrSize readSize = 0;
 
@@ -107,12 +108,43 @@ PtrSize File::read(void* buff, PtrSize size)
 	return readSize;
 }
 
+//==============================================================================
+void File::readAll(std::string& txt)
+{
+	ANKI_ASSERT(file);
+	ANKI_ASSERT((openFlags & OF_BINARY) == false 
+		&& "Should not be binary file");
+	ANKI_ASSERT(openFlags & OF_READ);
+
+	switch(fileType)
+	{
+	case FT_C:
+		{
+			fseek((FILE*)file, 0, SEEK_END);
+			PtrSize size = ftell((FILE*)file);
+			rewind((FILE*)file);
+
+			txt.resize(size);
+			PtrSize readSize = fread(&txt[0], 1, size, (FILE*)file);
+			(void)readSize;
+			ANKI_ASSERT(readSize == size);
+			break;
+		}
+	case FT_ZIP:
+		ANKI_ASSERT(0 && "Not implemented");
+		break;
+	default:
+		ANKI_ASSERT(0);
+	}
+}
+
 //==============================================================================
 PtrSize File::write(void* buff, PtrSize size)
 {
 	ANKI_ASSERT(file);
 	ANKI_ASSERT(buff);
 	ANKI_ASSERT(size > 0);
+	ANKI_ASSERT(openFlags & OF_WRITE);
 
 	PtrSize writeSize = 0;
 
@@ -136,6 +168,7 @@ void File::writeString(const char* format, ...)
 {
 	ANKI_ASSERT(file);
 	ANKI_ASSERT(format);
+	ANKI_ASSERT(openFlags & OF_WRITE);
 
 	va_list args;
 	va_start(args, format);