#include #include #include #include "JLang/JClass.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" namespace { struct __A__ {}; /** * Print class parameters. * * \param out output stream * \param name name of class */ template inline void print(std::ostream& out, const char* name) { using namespace std; using namespace JPP; out << setw(36) << left << name; out << setw(4) << '.' << setw(8) << left << JClass::is_primitive; out << setw(4) << '.' << setw(8) << left << JClass::is_pointer; out << setw(4) << '.' << setw(8) << left << JClass::is_reference; out << setw(4) << '.' << setw(8) << left << JClass::is_constant; out << endl; } } /** * Print class parameters. * * \param OUT output stream * \param T class */ #define PRINT(OUT, T) print(OUT, #T) /** * \file * * Example program to test JLANG::JClass class. * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; int debug; try { JParser<> zap("Example program to test class inspection."); zap['d'] = make_field(debug) = 3; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } if (debug >= debug_t) { cout << setw(36) << left << "name"; cout << setw(12) << "primitive"; cout << setw(12) << " pointer"; cout << setw(12) << "reference"; cout << setw(12) << "constant"; cout << endl; cout << setfill('.'); PRINT(cout, int); PRINT(cout, int&); PRINT(cout, const int*); PRINT(cout, __A__); PRINT(cout, JClass ::argument_type); PRINT(cout, JClass<__A__>::argument_type); } ASSERT( JClass::is_primitive); ASSERT(!JClass::is_pointer); ASSERT(!JClass::is_reference); ASSERT(!JClass::is_constant); ASSERT( JClass::is_primitive); ASSERT(!JClass::is_pointer); ASSERT( JClass::is_reference); ASSERT(!JClass::is_constant); ASSERT( JClass::is_primitive); ASSERT( JClass::is_pointer); ASSERT(!JClass::is_reference); ASSERT( JClass::is_constant); ASSERT(!JClass<__A__>::is_primitive); ASSERT(!JClass<__A__>::is_pointer); ASSERT(!JClass<__A__>::is_reference); ASSERT(!JClass<__A__>::is_constant); ASSERT(!JClass ::argument_type>::is_reference); ASSERT( JClass::argument_type>::is_reference); ASSERT(is_iterator<__A__> ::value == false); ASSERT(is_iterator<__A__&>::value == false); ASSERT(is_iterator<__A__*>::value == true); ASSERT(is_iterator::iterator>::value == true); ASSERT(is_iterator::const_iterator>::value == true); ASSERT(is_iterator::reverse_iterator>::value == true); ASSERT(is_iterator::const_reverse_iterator>::value == true); return 0; }