bdb087c930
Otherwise printf is undeclared. These files worked with earlier versions of gcc because either cstdio or stdio.h was being included by some other header file. But this was not guaranteed behavior, so with GCC 4.4 there are errors. The fix is backwards compatible with earlier versions of GCC. This change includes either <cstdio> or <stdio.h> whichever looks more appropriate given the other headers included by the given source file. Note, I'm using "GCC" to mean Gnu Compile Collection, as this problem is specific to C++ source files. (Presumably a C++-specific header file changed to no longer include cstdio.)
136 lines
2.8 KiB
C++
136 lines
2.8 KiB
C++
#include "Values.h"
|
|
#include <stdlib.h>
|
|
#include <cstdio>
|
|
|
|
|
|
// =====================================================================================
|
|
StringResource::StringResource(const SourcePos& p, const string& f, const Configuration& c,
|
|
const string& i, int ix, XMLNode* v, const int ve, const string& vs,
|
|
const string& cmnt)
|
|
:pos(p),
|
|
file(f),
|
|
config(c),
|
|
id(i),
|
|
index(ix),
|
|
value(v),
|
|
version(ve),
|
|
versionString(vs),
|
|
comment(cmnt)
|
|
{
|
|
}
|
|
|
|
StringResource::StringResource()
|
|
:pos(),
|
|
file(),
|
|
config(),
|
|
id(),
|
|
index(-1),
|
|
value(NULL),
|
|
version(),
|
|
versionString(),
|
|
comment()
|
|
{
|
|
}
|
|
|
|
StringResource::StringResource(const StringResource& that)
|
|
:pos(that.pos),
|
|
file(that.file),
|
|
config(that.config),
|
|
id(that.id),
|
|
index(that.index),
|
|
value(that.value),
|
|
version(that.version),
|
|
versionString(that.versionString),
|
|
comment(that.comment)
|
|
{
|
|
}
|
|
|
|
int
|
|
StringResource::Compare(const StringResource& that) const
|
|
{
|
|
if (file != that.file) {
|
|
return file < that.file ? -1 : 1;
|
|
}
|
|
if (id != that.id) {
|
|
return id < that.id ? -1 : 1;
|
|
}
|
|
if (index != that.index) {
|
|
return index - that.index;
|
|
}
|
|
if (config != that.config) {
|
|
return config < that.config ? -1 : 1;
|
|
}
|
|
if (version != that.version) {
|
|
return version < that.version ? -1 : 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
string
|
|
StringResource::TypedID() const
|
|
{
|
|
string result;
|
|
if (index < 0) {
|
|
result = "string:";
|
|
} else {
|
|
char n[20];
|
|
sprintf(n, "%d:", index);
|
|
result = "array:";
|
|
result += n;
|
|
}
|
|
result += id;
|
|
return result;
|
|
}
|
|
|
|
static void
|
|
split(const string& raw, vector<string>*parts)
|
|
{
|
|
size_t index = 0;
|
|
while (true) {
|
|
size_t next = raw.find(':', index);
|
|
if (next != raw.npos) {
|
|
parts->push_back(string(raw, index, next-index));
|
|
index = next + 1;
|
|
} else {
|
|
parts->push_back(string(raw, index));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool
|
|
StringResource::ParseTypedID(const string& raw, string* id, int* index)
|
|
{
|
|
vector<string> parts;
|
|
split(raw, &parts);
|
|
|
|
const size_t N = parts.size();
|
|
|
|
for (size_t i=0; i<N; i++) {
|
|
if (parts[i].length() == 0) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (N == 2 && parts[0] == "string") {
|
|
*id = parts[1];
|
|
*index = -1;
|
|
return true;
|
|
}
|
|
else if (N == 3 && parts[0] == "array") {
|
|
char* p;
|
|
int n = (int)strtol(parts[1].c_str(), &p, 0);
|
|
if (*p == '\0') {
|
|
*id = parts[2];
|
|
*index = n;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
|