1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
/*
* rtresource.cpp
*
* Copyright (c) 2000-2004 by Florian Fischer (florianfischer@gmx.de)
* and Martin Trautmann (martintrautmann@gmx.de)
*
* This file may be distributed and/or modified under the terms of the
* GNU General Public License version 2 as published by the Free Software
* Foundation.
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#include "rtresource.h"
#include "rtmap.h"
#include "rtfile.h"
#include "rtstreams.h"
namespace lrt{
StringMap<lrt_resource_type> Resource::resources;
void Resource::addResource(const lrt_resource_type& res)
{
resources.put(res.name, res);
}
InputStream* Resource::getResource(const String& name)
{
File file(name);
if(file.exists())
return new FileInputStream(file, false);
if(resources.isSet(name))
return new ResourceInputStream(resources.get(name));
return 0;
}
/** ResourceInputStream */
ResourceInputStream::ResourceInputStream(const lrt_resource_type& res) :
resource(res), pos(0), markPos(0)
{
}
int ResourceInputStream::read()
{
if(pos < resource.length)
return resource.data[pos++];
return -1;
}
bool ResourceInputStream::eos()
{
if(pos < resource.length)
return false;
else
return true;
}
bool ResourceInputStream::markSupported()
{
return true;
}
void ResourceInputStream::mark()
{
markPos = pos;
}
void ResourceInputStream::reset()
{
pos = markPos;
}
} // namespace
|