//
// Common.cpp
// MacOSX-Framework
//
// Created by John Ryland on 2/10/17.
// Copyright © 2017 John Ryland. All rights reserved.
//
#include "Common.h"
#include <algorithm>
#include <fstream>
#include <iterator>
#include "../Platform/Platform.h"
void loadFile(const char* a_fileName, std::vector<uint8_t>& a_output)
{
std::ifstream file(GetPathForResource(a_fileName), std::ifstream::binary);
if (!file.is_open())
{
Log(LL_Error, "Can't open file %s", a_fileName);
return;
}
file >> std::noskipws;
std::copy(std::istream_iterator<uint8_t>(file), std::istream_iterator<uint8_t>(), std::back_inserter(a_output));
}
/*
class ResourceLoadJob : public Task
{
public:
ResourceLoadJob(const char* a_fileName, std::function<void(const std::vector<uint8_t>&)> a_callback)
: m_fileName(a_fileName), m_callback(a_callback)
{
}
void execute() override
{
loadFile(m_fileName.c_str(), m_data);
}
void onCompletion() override
{
m_callback(m_data);
}
private:
std::string m_fileName;
std::vector<uint8_t> m_data;
std::function<void(const std::vector<uint8_t>&)> m_callback;
};
*/
void loadFileAsync(TaskManager& a_mgr, const char* a_fileName, std::function<void(const std::vector<uint8_t>&)> a_callback)
{
std::string fileName = a_fileName;
a_mgr.queueTask(std::make_unique<GenericTask<std::vector<uint8_t>>>("loadFileAsync", [fileName](){
std::vector<uint8_t> data;
loadFile(fileName.c_str(), data);
return data;
}, [a_callback](std::vector<uint8_t> data) {
a_callback(data);
}
));
//a_mgr.addTaskToQueueInternal(new ResourceLoadJob(a_fileName, a_callback));
}
void Log(enum LogLevel a_level, const char* a_fmt, ...)
{
va_list args;
va_start(args, a_fmt);
vfprintf(stderr, a_fmt, args);
fprintf(stderr, "\n");
va_end(args);
}