#include "TypeDescription.h"
#include <cassert>
+#include <cstring>
#include <stdexcept>
using std::map;
}
}
+void TypeDescription::Construct(void *data) const {
+ if (constructor) {
+ (*constructor)(data);
+ } else {
+ std::memset(data, 0, Size());
+ }
+}
+
void TypeDescription::AddSupertype(int id, std::ptrdiff_t offset) {
supertypes[id] = offset;
}
-vector<TypeDescription> Interpreter::typeDescriptions;
+vector<TypeDescription> TypeDescription::typeDescriptions;
TypeDescription &TypeDescription::CreateOrGet(const std::string &name) {
- for (vector<TypeDescription>::const_iterator i(typeDescriptions.begin()), end(typeDescriptions.end()); i != end; ++i) {
+ for (vector<TypeDescription>::iterator i(typeDescriptions.begin()), end(typeDescriptions.end()); i != end; ++i) {
if (i->name == name) {
return *i;
}
}
const TypeDescription &TypeDescription::Get(int id) {
- assert(id >= 0 && id < typeDescriptions.size());
+ assert(id >= 0 && id < int(typeDescriptions.size()));
return typeDescriptions[id];
}