Skip to content

Commit

Permalink
populate cpp file for yarpidl_thrift structures; freshen namespace su…
Browse files Browse the repository at this point in the history
…pport
  • Loading branch information
paulfitz committed May 15, 2013
1 parent 4f6fc6c commit 0c7645b
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 49 deletions.
108 changes: 60 additions & 48 deletions src/idls/thrift/src/t_yarp_generator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,7 @@ string t_yarp_generator::base_type_name(t_base_type::t_base tbase) {


string t_yarp_generator::namespace_decorate(string ns, string str) {
if (ns=="") return str;
string prefix = namespace_prefix(ns);
if (prefix.find(" ::")==0) {
prefix = prefix.substr(3,prefix.length());
Expand Down Expand Up @@ -742,6 +743,7 @@ void t_yarp_generator::generate_program() {
f_out2_ << (*o_iter)->get_name() << ".h" << endl;
if ((*o_iter)->annotations_.find("yarp.includefile") == (*o_iter)->annotations_.end())
f_out3_ << (*o_iter)->get_name() << ".h" << endl;
f_out3_ << (*o_iter)->get_name() << ".cpp" << endl;
}
}
}
Expand Down Expand Up @@ -1181,7 +1183,6 @@ void t_yarp_generator::generate_struct(t_struct* tstruct) {
f_cpp_.open(f_cpp_name.c_str());

auto_warn(f_cpp_);
f_cpp_ << "// In fact this file is blank, it isn't needed yet" << endl;

string name = tstruct->get_name();
vector<t_field*> members = tstruct->get_members();
Expand Down Expand Up @@ -1218,8 +1219,6 @@ void t_yarp_generator::generate_struct(t_struct* tstruct) {


string ns = get_namespace(program_);
namespace_open(f_cpp_,ns);
f_cpp_ << endl << endl;

namespace_open(f_stt_,ns,false);
indent(f_stt_) << "class " << name << ";" << endl;
Expand Down Expand Up @@ -1317,83 +1316,96 @@ void t_yarp_generator::generate_struct(t_struct* tstruct) {
scope_down(out);


indent(f_stt_) << "bool read(yarp::os::idl::WireReader& reader) {"
<< endl;
indent_up();
for (mem_iter = members.begin() ; mem_iter != members.end(); mem_iter++) {
string mname = (*mem_iter)->get_name();
string mtype = print_type((*mem_iter)->get_type());
generate_deserialize_field(f_stt_, *mem_iter, "");
}
indent(f_stt_) << "return !reader.isError();"
indent(f_stt_) << "bool read(yarp::os::idl::WireReader& reader);"
<< endl;
indent_down();
indent(f_stt_) << "}" << endl;

indent(f_stt_) << "bool read(yarp::os::ConnectionReader& connection) {"
indent(f_stt_) << "bool read(yarp::os::ConnectionReader& connection);"
<< endl;
indent_up();
indent(f_stt_) << "yarp::os::idl::WireReader reader(connection);"


indent(f_stt_) << "bool write(yarp::os::idl::WireWriter& writer);"
<< endl;
indent(f_stt_) << "if (!reader.readListHeader("
<< members.size()
<< ")) return false;"
indent(f_stt_) << "bool write(yarp::os::ConnectionWriter& connection);"
<< endl;
indent(f_stt_) << "return read(reader);" << endl;
scope_down(f_stt_);

indent_down();
f_stt_ << "};" << endl;

f_stt_ << endl;

f_stt_ << "#endif" << endl;
f_stt_ << endl;


// header done - now generate source

indent(f_stt_) << "bool write(yarp::os::idl::WireWriter& writer) {"
if (cmake_supplies_headers_) {
f_cpp_ << "@HEADERS@" << endl;
}
else
{
f_cpp_ << "#include <" << get_include_prefix(*program_) + name + ".h>" << endl;
}
indent(f_cpp_) << endl;

namespace_open(f_cpp_,ns);

indent(f_cpp_) << "bool " << name
<< "::read(yarp::os::idl::WireReader& reader) {"
<< endl;
indent_up();
for (mem_iter=members.begin() ; mem_iter != members.end(); mem_iter++) {
for (mem_iter = members.begin() ; mem_iter != members.end(); mem_iter++) {
string mname = (*mem_iter)->get_name();
string mtype = print_type((*mem_iter)->get_type());
generate_serialize_field(f_stt_, *mem_iter, "");
generate_deserialize_field(f_cpp_, *mem_iter, "");
}
indent(f_stt_) << "return !writer.isError();"
indent(f_cpp_) << "return !reader.isError();"
<< endl;
scope_down(f_stt_);
scope_down(f_cpp_);
indent(f_cpp_) << endl;

/*
indent(f_stt_) << "int count(yarp::os::idl::WireWriter& writer) {"
indent(f_cpp_) << "bool " << name
<< "::read(yarp::os::ConnectionReader& connection) {"
<< endl;
indent_up();
indent(f_stt_) << "int ct = 0;"
indent(f_cpp_) << "yarp::os::idl::WireReader reader(connection);"
<< endl;
indent(f_cpp_) << "if (!reader.readListHeader("
<< members.size()
<< ")) return false;"
<< endl;
indent(f_cpp_) << "return read(reader);" << endl;
scope_down(f_cpp_);
indent(f_cpp_) << endl;

indent(f_cpp_) << "bool " << name
<< "::write(yarp::os::idl::WireWriter& writer) {"
<< endl;
indent_up();
for (mem_iter=members.begin() ; mem_iter != members.end(); mem_iter++) {
string mname = (*mem_iter)->get_name();
string mtype = print_type((*mem_iter)->get_type());
generate_count_field(f_stt_, *mem_iter, "");
generate_serialize_field(f_cpp_, *mem_iter, "");
}
indent(f_stt_) << "return ct;"
indent(f_cpp_) << "return !writer.isError();"
<< endl;
scope_down(f_stt_);
*/
scope_down(f_cpp_);
indent(f_cpp_) << endl;

indent(f_stt_) << "bool write(yarp::os::ConnectionWriter& connection) {"
indent(f_cpp_) << "bool " << name
<< "::write(yarp::os::ConnectionWriter& connection) {"
<< endl;
indent_up();
indent(f_stt_) << "yarp::os::idl::WireWriter writer(connection);"
indent(f_cpp_) << "yarp::os::idl::WireWriter writer(connection);"
<< endl;
indent(f_stt_) << "if (!writer.writeListHeader("
indent(f_cpp_) << "if (!writer.writeListHeader("
<< flat_element_count(tstruct)
<< ")) return false;"
<< endl;
indent(f_stt_) << "return write(writer);" << endl;
scope_down(f_stt_);

indent_down();
f_stt_ << "};" << endl;

f_stt_ << endl;
indent(f_cpp_) << "return write(writer);" << endl;
scope_down(f_cpp_);

namespace_close(f_cpp_,get_namespace(program_));
f_cpp_ << endl;

f_stt_ << "#endif" << endl;
f_stt_ << endl;
}

void t_yarp_generator::generate_xception(t_struct* txception) {
Expand Down
4 changes: 3 additions & 1 deletion src/idls/thrift/tests/demo/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ include(${YARP_MODULE_PATH}/YarpIDL.cmake)

set(generated_libs_dir "${CMAKE_CURRENT_BINARY_DIR}")
yarp_idl_to_dir(demo.thrift ${generated_libs_dir})
yarp_idl_to_dir(namespaced.thrift ${generated_libs_dir})

include_directories(${generated_libs_dir}/demo)
include_directories(${generated_libs_dir}/namespaced)
include_directories(${YARP_INCLUDE_DIRS})
add_executable(demo_test main.cpp ${generated_libs_dir}/demo/Demo.h ${generated_libs_dir}/demo/Demo.cpp ${generated_libs_dir}/demo/DemoEnum.h ${generated_libs_dir}/demo/DemoEnum.cpp)
add_executable(demo_test main.cpp ${generated_libs_dir}/demo/Demo.h ${generated_libs_dir}/demo/Demo.cpp ${generated_libs_dir}/demo/DemoEnum.h ${generated_libs_dir}/demo/DemoEnum.cpp ${generated_libs_dir}/demo/DemoStruct.cpp ${generated_libs_dir}/demo/DemoStruct.h ${generated_libs_dir}/namespaced/NSDemo.h ${generated_libs_dir}/namespaced/NSDemo.cpp ${generated_libs_dir}/namespaced/NSDemoEnum.h ${generated_libs_dir}/namespaced/NSDemoEnum.cpp ${generated_libs_dir}/namespaced/NSDemoStruct.cpp ${generated_libs_dir}/namespaced/NSDemoStruct.h)
target_link_libraries(demo_test ${YARP_LIBRARIES})

add_test(demo_basic demo_test --help)
Expand Down
5 changes: 5 additions & 0 deletions src/idls/thrift/tests/demo/demo.thrift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ enum DemoEnum {
ENUM3 = 3
}

struct DemoStruct {
1: i32 x = 0,
2: i32 y
}

service Demo {
i32 get_answer();
bool set_answer(1:i32 rightAnswer)
Expand Down
17 changes: 17 additions & 0 deletions src/idls/thrift/tests/demo/namespaced.thrift
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@

namespace yarp DemoWithNamespace


enum NSDemoEnum {
ENUM1 = 1,
ENUM2 = 2
}

struct NSDemoStruct {
1: i32 x,
2: i32 y
}

service NSDemo {
i32 get_answer();
}

0 comments on commit 0c7645b

Please sign in to comment.