Skip to content
Snippets Groups Projects
Commit 15f6e867 authored by Rafael Ravedutti's avatar Rafael Ravedutti
Browse files

Add first runtime version (not tested yet)

parent dcccfc94
No related branches found
No related tags found
No related merge requests found
#include <iostream>
#include <vector>
#define PAIRS_ASSERT(a)
namespace pairs {
typedef int property_t;
typedef int layout_t;
class PairsSim {
PairsSim() : {}
public:
Property getProperty(property_t id) {
return std::find_if(properties.begin(), properties.end(), [id](Property p) { return p.getId() == id; });
}
Property getPropertyByName(std::string name) {
return std::find_if(properties.begin(), properties.end(), [name](Property p) { return p.getName() == name; });
}
VectorPtr getFloatPropertyMutablePtr(property_t property) {
return static_cast<VectorPtr>(getProperty(property).getPointer());
}
int *getIntegerPropertyMutablePtr(property_t property) {
return static_cast<int *>(getProperty(property).getPointer());
}
double *getFloatPropertyMutablePtr(property_t property) {
return static_cast<double *>(getProperty(property).getPointer());
}
private:
std::vector<Property> properties;
};
class Property {
Property(property_t id_, std::string name_) : id(id_), name(name_), layout(-1), ptr(nullptr) {}
Property(property_t id_, std::string name_, layout_t layout_) : id(id_), name(name_), layout(layout_), ptr(nullptr) {}
Property(property_t id_, std::string name_, void *ptr_) : id(id_), name(name_), layout(-1), ptr(ptr_) {}
Property(property_t id_, std::string name_, layout_t layout_, void *ptr_) : id(id_), name(name_), layout(layout_), ptr(ptr_) {}
public:
property_t getId() { return id; }
std::string getName() { return name; }
void *getPointer() { return ptr; }
void setPointer(void *ptr_) { ptr = ptr_; }
private:
property_t id;
layout_t layout;
std::string name;
void *ptr;
};
template<typename real_t>
class Vector3 {
Vector3() : x((real_t) 0.0), y((real_t) 0.0), z((real_t) 0.0) : {}
Vector3(real_t v) : x(v), y(v), z(v) : {}
Vector3(real_t x_, real_t y_, real_t z_) : x(x_), y(y_), z(z_) {}
private:
real_t x, y, z;
};
}
#include <stdio.h>
//---
#include "pairs.hpp"
namespace pairs {
size_t read_particle_data(PairsSim *ps, const char *filename, property_t properties[], size_t nprops) {
std::ifstream in_file(filename);
std::string line;
size_t n = 0;
if(in_file.is_open()) {
while(getline(in_file, line)) {
int p = 0;
char *in0 = strtok(line, ",");
while(in0 != NULL) {
PAIRS_ASSERT(p < nprops);
prop_type = ps->getPropertyType(p);
switch(prop_type) {
case PROPERTY_TYPE_VECTOR:
auto vector_ptr = ps->getVectorPropertyMutablePtr(p);
char *in1 = strtok(NULL, ",");
PAIRS_ASSERT(in1 != NULL);
char *in2 = strtok(NULL, ",");
PAIRS_ASSERT(in2 != NULL);
vector_ptr[n] = Vector3(std::stod(in0), std::stod(in1), std::stod(in2));
break;
case PROPERTY_TYPE_INTEGER:
auto int_ptr = ps->getIntegerPropertyMutablePtr(p);
int_ptr[n] = std::stoi(in0);
break;
case PROPERTY_TYPE_FLOAT:
auto float_ptr = ps->getFloatPropertyMutablePtr(p);
float_ptr[n] = std::stod(in0);
break;
default:
fprintf(stderr, "read_particle_data(): Invalid property type!");
return -1;
}
in0 = strtok(NULL, ",");
p++;
}
n++;
}
in_file.close();
}
return n;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment