From: <wsf...@us...> - 2012-09-13 18:55:58
|
Revision: 13833 http://swig.svn.sourceforge.net/swig/?rev=13833&view=rev Author: wsfulton Date: 2012-09-13 18:55:52 +0000 (Thu, 13 Sep 2012) Log Message: ----------- Add text streamer to Android example to replace missing stdout Modified Paths: -------------- trunk/Examples/android/extend/jni/example.cpp trunk/Examples/android/extend/jni/example.h trunk/Examples/android/extend/jni/example.i trunk/Examples/android/extend/src/org/swig/extendexample/SwigExtend.java Modified: trunk/Examples/android/extend/jni/example.cpp =================================================================== --- trunk/Examples/android/extend/jni/example.cpp 2012-09-13 18:54:25 UTC (rev 13832) +++ trunk/Examples/android/extend/jni/example.cpp 2012-09-13 18:55:52 UTC (rev 13833) @@ -2,3 +2,13 @@ #include "example.h" +static Streamer * streamerInstance = 0; + +void setStreamer(Streamer* streamer) { + streamerInstance = streamer; +} + +Streamer& getStreamer() { + return *streamerInstance; +} + Modified: trunk/Examples/android/extend/jni/example.h =================================================================== --- trunk/Examples/android/extend/jni/example.h 2012-09-13 18:54:25 UTC (rev 13832) +++ trunk/Examples/android/extend/jni/example.h 2012-09-13 18:55:52 UTC (rev 13833) @@ -5,7 +5,22 @@ #include <vector> #include <string> #include <cmath> +#include <sstream> +struct Streamer { + virtual void display(std::string text) const = 0; + virtual ~Streamer() {} +}; +void setStreamer(Streamer* streamer); +Streamer& getStreamer(); + +template<typename T> Streamer& operator<<(Streamer& stream, T const& val) { + std::ostringstream s; + s << val; + stream.display(s.str()); + return stream; +} + class Employee { private: std::string name; @@ -14,7 +29,7 @@ virtual std::string getTitle() { return getPosition() + " " + getName(); } virtual std::string getName() { return name; } virtual std::string getPosition() const { return "Employee"; } - virtual ~Employee() { printf("~Employee() @ %p\n", this); } + virtual ~Employee() { getStreamer() << "~Employee() @ " << this << "\n"; } }; @@ -35,10 +50,10 @@ } void addEmployee(Employee *p) { list.push_back(p); - std::cout << "New employee added. Current employees are:" << std::endl; + getStreamer() << "New employee added. Current employees are:" << "\n"; std::vector<Employee*>::iterator i; for (i=list.begin(); i!=list.end(); i++) { - std::cout << " " << (*i)->getTitle() << std::endl; + getStreamer() << " " << (*i)->getTitle() << "\n"; } } const Employee *get_item(int i) { @@ -46,11 +61,11 @@ } ~EmployeeList() { std::vector<Employee*>::iterator i; - std::cout << "~EmployeeList, deleting " << list.size() << " employees." << std::endl; + getStreamer() << "~EmployeeList, deleting " << list.size() << " employees." << "\n"; for (i=list.begin(); i!=list.end(); i++) { delete *i; } - std::cout << "~EmployeeList empty." << std::endl; + getStreamer() << "~EmployeeList empty." << "\n"; } }; Modified: trunk/Examples/android/extend/jni/example.i =================================================================== --- trunk/Examples/android/extend/jni/example.i 2012-09-13 18:54:25 UTC (rev 13832) +++ trunk/Examples/android/extend/jni/example.i 2012-09-13 18:55:52 UTC (rev 13833) @@ -11,5 +11,8 @@ %feature("director") Employee; %feature("director") Manager; +/* A base class for callbacks from C++ to output text on the Java side */ +%feature("director") Streamer; + %include "example.h" Modified: trunk/Examples/android/extend/src/org/swig/extendexample/SwigExtend.java =================================================================== --- trunk/Examples/android/extend/src/org/swig/extendexample/SwigExtend.java 2012-09-13 18:54:25 UTC (rev 13832) +++ trunk/Examples/android/extend/src/org/swig/extendexample/SwigExtend.java 2012-09-13 18:55:52 UTC (rev 13833) @@ -8,7 +8,6 @@ import android.widget.ScrollView; import android.text.method.ScrollingMovementMethod; - // CEO class, which overrides Employee::getPosition(). class CEO extends Manager { public CEO(String name) { @@ -29,6 +28,15 @@ TextView outputText = null; ScrollView scroller = null; + /** Handles upcalls from C++ so that C++ code can display text on the TextView */ + class TextViewStreamer extends Streamer { + public void display(String text) { + outputText.append(text); + } + } + + TextViewStreamer textViewStreamer = new TextViewStreamer(); + /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) @@ -41,6 +49,8 @@ outputText.setMovementMethod(new ScrollingMovementMethod()); scroller = (ScrollView)findViewById(R.id.Scroller); + + example.setStreamer(textViewStreamer); } public void onRunButtonClick(View view) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |