added SparrowResource
This commit is contained in:
parent
f7d69b4a20
commit
8f6ebade36
8
resource/CMakeLists.txt
Normal file
8
resource/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
project(SparrowResource)
|
||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
# choose source file
|
||||||
|
set(EXEC_SRC_LIST main.cpp)
|
||||||
|
|
||||||
|
include(../template.cmake)
|
||||||
|
|
@ -5,27 +5,50 @@ using namespace std;
|
|||||||
|
|
||||||
#define NB_VAL_PER_LINE 256
|
#define NB_VAL_PER_LINE 256
|
||||||
|
|
||||||
|
#define FILE_BEGIN "#include <string>\n\
|
||||||
|
#include <unordered_map>\n\
|
||||||
|
\n\
|
||||||
|
namespace Resource {\n\
|
||||||
|
std::unordered_map<std::string, const char*> *resourceFilesData;\n"
|
||||||
|
|
||||||
|
#define FILE_MID "\nvoid initResourceData()\n\
|
||||||
|
{\n\
|
||||||
|
resourceFilesData = new std::unordered_map<std::string, const char*>();\n"
|
||||||
|
|
||||||
|
#define FILE_END "\n\
|
||||||
|
}\n\
|
||||||
|
\n\
|
||||||
|
const char* get(const std::string &fileName)\n\
|
||||||
|
{\n\
|
||||||
|
if(resourceFilesData->count(fileName) > 0)\n\
|
||||||
|
return (*resourceFilesData)[fileName];\n\
|
||||||
|
else\n\
|
||||||
|
return NULL;\n\
|
||||||
|
}\n\
|
||||||
|
}\n"
|
||||||
|
|
||||||
|
unsigned int n = 0;
|
||||||
|
|
||||||
bool addFile(const string &inFile, FILE *out)
|
bool addFile(const string &inFile, FILE *out)
|
||||||
{
|
{
|
||||||
static unsigned int n = 0;
|
|
||||||
FILE *in = fopen(inFile.c_str(), "r");
|
FILE *in = fopen(inFile.c_str(), "r");
|
||||||
if(in == NULL)
|
if(in == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "can't open \"%s\" for readingn", inFile.c_str());
|
fprintf(stderr, "can't open \"%s\" for readingn", inFile.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
fprintf(out, "\n\tunsigned char data%d[] = {\n", n);
|
fprintf(out, "\nconst char data%d[] = {\n", n);
|
||||||
unsigned char ptr[NB_VAL_PER_LINE];
|
char ptr[NB_VAL_PER_LINE];
|
||||||
size_t nbRead;
|
size_t nbRead;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
nbRead = fread(ptr, sizeof(unsigned char), NB_VAL_PER_LINE, in);
|
nbRead = fread(ptr, sizeof(char), NB_VAL_PER_LINE, in);
|
||||||
for(unsigned int i=0; i<nbRead; ++i)
|
for(unsigned int i=0; i<nbRead; ++i)
|
||||||
fprintf(out, i ? ",0x%x" : "\t\t0x%x", ptr[i]);
|
fprintf(out, i ? ",0x%x" : "\t0x%x", ptr[i]);
|
||||||
fprintf(out, "\n\t");
|
fprintf(out, "\n");
|
||||||
}
|
}
|
||||||
while(nbRead == NB_VAL_PER_LINE);
|
while(nbRead == NB_VAL_PER_LINE);
|
||||||
fprintf(out, "};\n\tresourceFilesData[std::string(\"%s\")] = data%d;\n", inFile.c_str(), n);
|
fprintf(out, "};\n");
|
||||||
++n;
|
++n;
|
||||||
fclose(in);
|
fclose(in);
|
||||||
return true;
|
return true;
|
||||||
@ -46,7 +69,7 @@ int main(int argc, char *argv[])
|
|||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(out, "#include <string>\n#include <unordered_map>\n\nnamespace Resource {\nstd::unordered_map<std::string, unsigned char*> *resourceFilesData;\n\nvoid initResourceData()\n{\n\tresourceFilesData = new std::unordered_map<std::string, unsigned char*>();\n");
|
fprintf(out, FILE_BEGIN);
|
||||||
for(int i=2; i<argc; ++i)
|
for(int i=2; i<argc; ++i)
|
||||||
{
|
{
|
||||||
if(!addFile(argv[i], out))
|
if(!addFile(argv[i], out))
|
||||||
@ -57,7 +80,10 @@ int main(int argc, char *argv[])
|
|||||||
else
|
else
|
||||||
printf("successfully added \"%s\" to \"%s\".\n", argv[i], argv[1]);
|
printf("successfully added \"%s\" to \"%s\".\n", argv[i], argv[1]);
|
||||||
}
|
}
|
||||||
fprintf(out, "\n}\n\nunsigned char* get(std::string fileName)\n{\n\tif(resourceFilesData->count(fileName) > 0)\n\t\treturn (*resourceFilesData)[fileName];\n\telse\n\t\treturn NULL;\n}\n}\n");
|
fprintf(out, FILE_MID);
|
||||||
|
for(int i=0; i<n; ++i)
|
||||||
|
fprintf(out, "\t(*resourceFilesData)[\"%s\"] = data%d;\n", argv[2+i], i);
|
||||||
|
fprintf(out, FILE_END);
|
||||||
fclose(out);
|
fclose(out);
|
||||||
printf("successfully created resource file \"%s\".\n", argv[1]);
|
printf("successfully created resource file \"%s\".\n", argv[1]);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
namespace Resource {
|
namespace Resource {
|
||||||
extern void initResourceData();
|
extern void initResourceData();
|
||||||
extern unsigned char *get();
|
extern const char *get(const std::string&);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
7
resource/test/README
Normal file
7
resource/test/README
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
g++ -std=c++11 ../main.cpp -o SparrowResource.exe
|
||||||
|
|
||||||
|
SparrowResource res.cpp plop.txt
|
||||||
|
|
||||||
|
g++ -std=c++11 test.cpp res.cpp -o test.exe
|
||||||
|
|
||||||
|
test
|
1
resource/test/plop.txt
Normal file
1
resource/test/plop.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Hello World !
|
15
resource/test/test.cpp
Normal file
15
resource/test/test.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
cout << "Resource test" << endl;
|
||||||
|
Resource::initResourceData();
|
||||||
|
const char *str = Resource::get("plop.txt");
|
||||||
|
if(str != NULL)
|
||||||
|
cout << str << endl;
|
||||||
|
else
|
||||||
|
cout << "nope" << endl;
|
||||||
|
}
|
@ -1,9 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
include(test.cmake)
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8)
|
|
||||||
|
|
||||||
include(../template.cmake)
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user