#include #include #include #include "JLang/JVectorize.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" namespace { struct __A__ { __A__() : i(0) {} __A__(const int __i) : i(__i) {} int get() const { return i; } friend inline std::ostream& operator<<(std::ostream& out, const __A__& object) { return out << object.i; } int i; }; /** * Print data. * * \param out output stream * \param N number of elements * \param p pointer to data */ template inline void print(std::ostream& out, int N, T* p) { using namespace std; for (int i = 0; i != N; ++i) { out << ' ' << setw(2) << p[i]; } cout << endl; } } /** * \file * * Example program to test JLANG::make_array method. * \author mdejong */ int main(int argc, char **argv) { using namespace std; int debug; try { JParser<> zap("Example program to test converions of array of objects to array of data members."); zap['d'] = make_field(debug) = 3; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } using namespace JPP; vector<__A__> buffer; int numberOfElements = 5; for (int i = 0; i != numberOfElements; ++i) { buffer.push_back(__A__(i)); } if (debug >= debug_t) { print(cout, numberOfElements, buffer.data()); print(cout, numberOfElements, make_array(buffer.begin(), buffer.end(), &__A__::get).data()); print(cout, numberOfElements, make_array(buffer.begin(), buffer.end(), &__A__::i) .data()); } { const int* p = make_array(buffer.begin(), buffer.end(), &__A__::get).data(); for (int i = 0; i != numberOfElements; ++i, ++p) { ASSERT(buffer[i].get() == *p); } } { const int* p = make_array(buffer.begin(), buffer.end(), &__A__::i).data(); for (int i = 0; i != numberOfElements; ++i, ++p) { ASSERT(buffer[i].i == *p); } } return 0; }