libsaria: Replace SaveTask and LoadTask

I put in a generic IOTask function.  I'm sure this could eventually be
expanded to open and pass the appropriate stream to functions using this
task.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-02-23 09:57:52 -05:00
parent a9abe28d84
commit aaeb4d8fba
10 changed files with 74 additions and 99 deletions

View File

@ -1,41 +1,13 @@
#ifndef LIBSARIA_FILES_H
#define LIBSARIA_FILES_H
#include <libsaria/idle.h>
#include <libsaria/task.h>
#include <libsaria/print.h>
#include <sys/types.h>
#include <fstream>
using namespace std;
class SaveTask : public IdleTask
{
private:
void (*save_func)();
void (*save_func_aux)(void *);
void *save_aux;
public:
SaveTask(void (*func)());
SaveTask(void (*func)(void *), void *);
~SaveTask();
void run_task();
};
class LoadTask : public IdleTask
{
private:
void (*load_func)();
void (*load_func_aux)(void *);
void *load_aux;
public:
LoadTask(void (*func)());
LoadTask(void (*func)(void *), void *);
~LoadTask();
void run_task();
};
class OutFile : public ofstream
{
public:

View File

@ -1,17 +1,6 @@
#ifndef LIBSARIA_IDLE_H
#define LIBSARIA_IDLE_H
class IdleTask
{
public:
IdleTask();
virtual ~IdleTask() = 0;
virtual void run_task() = 0;
void queue();
void queue_front();
};
namespace libsaria
{
namespace idle

31
include/libsaria/task.h Normal file
View File

@ -0,0 +1,31 @@
#ifndef LIBSARIA_IDLE_TASK_H
#define LIBSARIA_IDLE_TASK_H
#include <cstddef>
class IdleTask
{
public:
IdleTask();
virtual ~IdleTask() = 0;
virtual void run_task() = 0;
void queue();
void queue_front();
};
class IOTask : public IdleTask
{
private:
void (*func)();
void (*func_aux)(void *);
void *aux;
public:
IOTask(void (*)());
IOTask(void (*)(void *), void *);
~IOTask();
void run_task();
};
#endif /* LIBSARIA_IDLE_TASK_H */

View File

@ -2,6 +2,7 @@
#define LIBSARIA_IDLE_COMPONENT_H
#include <libsaria/idle.h>
#include <libsaria/task.h>
namespace libsaria
{

28
libsaria/idle/io_task.cpp Normal file
View File

@ -0,0 +1,28 @@
// Copyright (c) 2012 Bryan Schumaker.
#include <libsaria/task.h>
IOTask::IOTask(void (*fn)())
{
func = fn;
func_aux = NULL;
aux = NULL;
}
IOTask::IOTask(void (*fn)(void *), void *data)
{
func = NULL;
func_aux = fn;
aux = data;
}
IOTask::~IOTask()
{
}
void IOTask::run_task()
{
if (func)
func();
else
func_aux(aux);
}

View File

@ -3,7 +3,7 @@
* Manages the libsaria library save file
*/
#include <libsaria/idle.h>
#include <libsaria/task.h>
#include <libsaria/library.h>
#include <libsaria/libpath.h>
#include "library.h"
@ -31,7 +31,7 @@ namespace libsaria
void library::load()
{
LoadTask *task = new LoadTask(do_load);
IOTask *task = new IOTask(do_load);
task->queue();
}

View File

@ -1,5 +1,6 @@
// Copyright (c) 2011 Bryan Schumaker.
#include <libsaria/path.h>
#include <libsaria/task.h>
#include <libsaria/index.h>
#include <libsaria/libpath.h>
#include <libsaria/print.h>
@ -52,7 +53,7 @@ static ScanTask *scandir(string dir, libsaria::LibraryPath *lib_path, ScanTask *
void ScanTask::run_task()
{
list<pair<string, sid_t> >::iterator it;
SaveTask *save;
IOTask *save;
bool dirty = false;
for (it = files.begin(); it != files.end(); it++) {
@ -66,7 +67,7 @@ void ScanTask::run_task()
if (dirty) {
/* Save the library */
save = new SaveTask(libsaria::library::save);
save = new IOTask(libsaria::library::save);
save->queue_front();
/* Bookkeeping for the UI */

View File

@ -2,58 +2,6 @@
#include <libsaria/files.h>
#include <libsaria/path.h>
SaveTask::SaveTask(void (*func)())
{
save_func = func;
save_func_aux = NULL;
save_aux = NULL;
}
SaveTask::SaveTask(void (*func)(void *), void *aux)
{
save_func = NULL;
save_func_aux = func;
save_aux = aux;
}
SaveTask::~SaveTask()
{
}
void SaveTask::run_task()
{
if (save_func)
save_func();
else
save_func_aux(save_aux);
}
LoadTask::LoadTask(void (*func)())
{
load_func = func;
load_func_aux = NULL;
load_aux = NULL;
}
LoadTask::LoadTask(void (*func)(void *), void *aux)
{
load_func = NULL;
load_func_aux= func;
load_aux = aux;
}
LoadTask::~LoadTask()
{
}
void LoadTask::run_task()
{
if (load_func)
load_func();
else
load_func_aux(load_aux);
}
OutFile::OutFile(string path)
{
string out_file = get_saria_dir() + "/" + path;

View File

@ -36,10 +36,12 @@ namespace libsaria
void Playlist::load()
{
IOTask *task;
if (filename == "")
return;
LoadTask *task = new LoadTask(load_playlist, this);
task = new IOTask(load_playlist, this);
task->queue();
}
@ -55,10 +57,12 @@ namespace libsaria
void Playlist::save()
{
IOTask *task;
if (filename == "")
return;
SaveTask *task = new SaveTask(save_playlist, this);
task = new IOTask(save_playlist, this);
task->queue();
}

View File

@ -3,6 +3,7 @@
using namespace std;
#include <libsaria/queue.h>
#include <libsaria/task.h>
#include <libsaria/library.h>
#include <libsaria/callback.h>
#include <libsaria/playlist.h>
@ -43,7 +44,7 @@ namespace libsaria
void queue::load()
{
LoadTask *task = new LoadTask(refresh);
IOTask *task = new IOTask(refresh);
task->queue();
}