wrap pair. Improve return.

release/4.3a0
Duy-Nguyen Ta 2016-09-11 16:40:09 -04:00
parent b91a7d368d
commit 63a5d1e15a
7 changed files with 56 additions and 30 deletions

View File

@ -111,18 +111,23 @@ void Method::emit_cython_pyx(FileWriter& file, const Class& cls) const {
/// Return part /// Return part
file.oss << "\t\t"; file.oss << "\t\t";
if (!returnVals_[i].isVoid()) file.oss << "return "; if (!returnVals_[i].isVoid()) {
// ... casting return value file.oss << "cdef ";
returnVals_[i].emit_cython_pyx_casting(file); returnVals_[i].emit_cython_pyx_return_type(file);
if (!returnVals_[i].isVoid()) file.oss << "("; file.oss << " ret = ";
}
//... function call
file.oss << "self." << cls.pyxCythonObj() << ".get()." << funcName; file.oss << "self." << cls.pyxCythonObj() << ".get()." << funcName;
if (templateArgValue_) file.oss << "[" << templateArgValue_->pyxCythonClass() << "]"; if (templateArgValue_) file.oss << "[" << templateArgValue_->pyxCythonClass() << "]";
// ... argument list
file.oss << "("; file.oss << "(";
argumentList(i).emit_cython_pyx_asParams(file); argumentList(i).emit_cython_pyx_asParams(file);
if (!returnVals_[i].isVoid()) file.oss << ")";
file.oss << ")\n"; file.oss << ")\n";
file.oss << "\t\t";
if (!returnVals_[i].isVoid()) file.oss << "return ";
// ... casting return value
returnVals_[i].emit_cython_pyx_casting(file, "ret");
file.oss << "\n";
} }
} }
/* ************************************************************************* */ /* ************************************************************************* */

View File

@ -76,7 +76,14 @@ void ReturnType::emit_cython_pxd(FileWriter& file) const {
} }
/* ************************************************************************* */ /* ************************************************************************* */
void ReturnType::emit_cython_pyx_casting(FileWriter& file) const { void ReturnType::emit_cython_pyx_return_type(FileWriter& file) const {
string retType = pyxCythonClass();
if (isPtr) retType = "shared_ptr[" + retType + "]";
file.oss << retType;
}
/* ************************************************************************* */
void ReturnType::emit_cython_pyx_casting(FileWriter& file, const std::string& var) const {
if (isEigen()) if (isEigen())
file.oss << "ndarray_copy"; file.oss << "ndarray_copy";
else if (isNonBasicType()){ else if (isNonBasicType()){
@ -88,6 +95,7 @@ void ReturnType::emit_cython_pyx_casting(FileWriter& file) const {
file.oss << pythonClassName() << ".cyCreateFromValue"; file.oss << pythonClassName() << ".cyCreateFromValue";
} }
} }
file.oss << "(" << var << ")";
} }
/* ************************************************************************* */ /* ************************************************************************* */

View File

@ -48,7 +48,8 @@ struct ReturnType: public Qualified {
} }
void emit_cython_pxd(FileWriter& file) const; void emit_cython_pxd(FileWriter& file) const;
void emit_cython_pyx_casting(FileWriter& file) const; void emit_cython_pyx_return_type(FileWriter& file) const;
void emit_cython_pyx_casting(FileWriter& file, const std::string& var) const;
private: private:

View File

@ -83,22 +83,30 @@ void ReturnValue::emit_cython_pxd(FileWriter& file) const {
} }
/* ************************************************************************* */ /* ************************************************************************* */
void ReturnValue::emit_cython_pyx_casting(FileWriter& file) const { void ReturnValue::emit_cython_pyx_return_type(FileWriter& file) const {
if (isVoid()) return; if (isVoid()) return;
if (isPair) { if (isPair) {
// file.oss << "cdef pair[" << type1.pyxCythonClass() << "," << type2.pyxCythonClass() << "]" file.oss << "pair [";
// << "ret = "; type1.emit_cython_pyx_return_type(file);
// file.oss << "("; file.oss << ",";
// type1.emit_cython_pyx_casting(file); type2.emit_cython_pyx_return_type(file);
// file.oss << "("; file.oss << "]";
// file.oss << type1.pyxCythonClass();
// file.oss << "),";
// type2.emit_cython_pyx_casting(file);
// file.oss << "(";
// file.oss << type2.pyxCythonClass();
// file.oss << "))";
} else { } else {
type1.emit_cython_pyx_casting(file); type1.emit_cython_pyx_return_type(file);
}
}
/* ************************************************************************* */
void ReturnValue::emit_cython_pyx_casting(FileWriter& file, const std::string& var) const {
if (isVoid()) return;
if (isPair) {
file.oss << "(";
type1.emit_cython_pyx_casting(file, var + ".first");
file.oss << ",";
type2.emit_cython_pyx_casting(file, var + ".second");
file.oss << ")";
} else {
type1.emit_cython_pyx_casting(file, var);
} }
} }

View File

@ -72,7 +72,8 @@ struct ReturnValue {
void emit_matlab(FileWriter& proxyFile) const; void emit_matlab(FileWriter& proxyFile) const;
void emit_cython_pxd(FileWriter& file) const; void emit_cython_pxd(FileWriter& file) const;
void emit_cython_pyx_casting(FileWriter& file) const; void emit_cython_pyx_return_type(FileWriter& file) const;
void emit_cython_pyx_casting(FileWriter& file, const std::string& var) const;
friend std::ostream& operator<<(std::ostream& os, const ReturnValue& r) { friend std::ostream& operator<<(std::ostream& os, const ReturnValue& r) {
if (!r.isPair && r.type1.category == ReturnType::VOID) if (!r.isPair && r.type1.category == ReturnType::VOID)

View File

@ -81,18 +81,21 @@ void StaticMethod::emit_cython_pyx(FileWriter& file, const Class& cls) const {
argumentList(i).emit_cython_pyx(file); argumentList(i).emit_cython_pyx(file);
file.oss << "):\n"; file.oss << "):\n";
file.oss << "\t\t"; file.oss << "\t\t";
if (!returnVals_[i].isVoid()) file.oss << "return "; //... function call
//... casting return value if (!returnVals_[i].isVoid()) file.oss << "ret = ";
returnVals_[i].emit_cython_pyx_casting(file);
if (!returnVals_[i].isVoid()) file.oss << "(";
file.oss << cls.pyxCythonClass() << "." file.oss << cls.pyxCythonClass() << "."
<< name_ << ((i>0)? "_" + to_string(i):""); << name_ << ((i>0)? "_" + to_string(i):"");
if (templateArgValue_) file.oss << "[" << templateArgValue_->pyxCythonClass() << "]"; if (templateArgValue_) file.oss << "[" << templateArgValue_->pyxCythonClass() << "]";
file.oss << "("; file.oss << "(";
argumentList(i).emit_cython_pyx_asParams(file); argumentList(i).emit_cython_pyx_asParams(file);
if (!returnVals_[i].isVoid()) file.oss << ")";
file.oss << ")\n"; file.oss << ")\n";
//... casting return value
if (!returnVals_[i].isVoid()) {
file.oss << "\t\treturn ";
returnVals_[i].emit_cython_pyx_casting(file, "ret");
}
file.oss << "\n";
} }
} }

View File

@ -380,7 +380,7 @@ virtual class GaussianFactor {
Matrix augmentedInformation() const; Matrix augmentedInformation() const;
Matrix information() const; Matrix information() const;
Matrix augmentedJacobian() const; Matrix augmentedJacobian() const;
// pair<Matrix, Vector> jacobian() const; pair<Matrix, Vector> jacobian() const;
size_t size() const; size_t size() const;
bool empty() const; bool empty() const;
}; };