summaryrefslogtreecommitdiffstats
path: root/lib/kross/python/cxx/cxxsupport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kross/python/cxx/cxxsupport.cpp')
-rw-r--r--lib/kross/python/cxx/cxxsupport.cpp142
1 files changed, 142 insertions, 0 deletions
diff --git a/lib/kross/python/cxx/cxxsupport.cpp b/lib/kross/python/cxx/cxxsupport.cpp
new file mode 100644
index 000000000..6f2234b26
--- /dev/null
+++ b/lib/kross/python/cxx/cxxsupport.cpp
@@ -0,0 +1,142 @@
+//---------------------------------------------------------------------------//
+// Copyright 1998 The Regents of the University of California.
+// All rights reserved. See Legal.htm for full text and disclaimer.
+//---------------------------------------------------------------------------//
+
+#include "Objects.h"
+namespace Py {
+
+Py_UNICODE unicode_null_string[1] = { 0 };
+
+Type Object::type () const
+ {
+ return Type (PyObject_Type (p), true);
+ }
+
+String Object::str () const
+ {
+ return String (PyObject_Str (p), true);
+ }
+
+String Object::repr () const
+ {
+ return String (PyObject_Repr (p), true);
+ }
+
+std::string Object::as_string() const
+ {
+ return static_cast<std::string>(str());
+ }
+
+List Object::dir () const
+ {
+ return List (PyObject_Dir (p), true);
+ }
+
+bool Object::isType (const Type& t) const
+ {
+ return type ().ptr() == t.ptr();
+ }
+
+Char::operator String() const
+ {
+ return String(ptr());
+ }
+
+// TMM: non-member operaters for iterators - see above
+// I've also made a bug fix in respect to the cxx code
+// (dereffed the left.seq and right.seq comparison)
+bool operator==(const Sequence::iterator& left, const Sequence::iterator& right)
+ {
+ return left.eql( right );
+ }
+
+bool operator!=(const Sequence::iterator& left, const Sequence::iterator& right)
+ {
+ return left.neq( right );
+ }
+
+bool operator< (const Sequence::iterator& left, const Sequence::iterator& right)
+ {
+ return left.lss( right );
+ }
+
+bool operator> (const Sequence::iterator& left, const Sequence::iterator& right)
+ {
+ return left.gtr( right );
+ }
+
+bool operator<=(const Sequence::iterator& left, const Sequence::iterator& right)
+ {
+ return left.leq( right );
+ }
+
+bool operator>=(const Sequence::iterator& left, const Sequence::iterator& right)
+ {
+ return left.geq( right );
+ }
+
+// now for const_iterator
+bool operator==(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
+ {
+ return left.eql( right );
+ }
+
+bool operator!=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
+ {
+ return left.neq( right );
+ }
+
+bool operator< (const Sequence::const_iterator& left, const Sequence::const_iterator& right)
+ {
+ return left.lss( right );
+ }
+
+bool operator> (const Sequence::const_iterator& left, const Sequence::const_iterator& right)
+ {
+ return left.gtr( right );
+ }
+
+bool operator<=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
+ {
+ return left.leq( right );
+ }
+
+bool operator>=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
+ {
+ return left.geq( right );
+ }
+
+// For mappings:
+bool operator==(const Mapping::iterator& left, const Mapping::iterator& right)
+ {
+ return left.eql( right );
+ }
+
+bool operator!=(const Mapping::iterator& left, const Mapping::iterator& right)
+ {
+ return left.neq( right );
+ }
+
+// now for const_iterator
+bool operator==(const Mapping::const_iterator& left, const Mapping::const_iterator& right)
+ {
+ return left.eql( right );
+ }
+
+bool operator!=(const Mapping::const_iterator& left, const Mapping::const_iterator& right)
+ {
+ return left.neq( right );
+ }
+
+// TMM: 31May'01 - Added the #ifndef so I can exclude iostreams.
+#ifndef CXX_NO_IOSTREAMS
+// output
+
+std::ostream& operator<< (std::ostream& os, const Object& ob)
+ {
+ return (os << static_cast<std::string>(ob.str()));
+ }
+#endif
+
+} // Py