PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/rel-1-3-29/SWIG/Lib/python/std_set.i

#
Swig | 58 lines | 46 code | 9 blank | 3 comment | 0 complexity | 9a62efde9cb5b7fa4ec7b7dc3e9c9ccc MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /*
  2. Sets
  3. */
  4. %fragment("StdSetTraits","header",fragment="StdSequenceTraits")
  5. %{
  6. namespace swig {
  7. template <class PySeq, class T>
  8. inline void
  9. assign(const PySeq& pyseq, std::set<T>* seq) {
  10. #ifdef SWIG_STD_NOINSERT_TEMPLATE_STL
  11. typedef typename PySeq::value_type value_type;
  12. typename PySeq::const_iterator it = pyseq.begin();
  13. for (;it != pyseq.end(); ++it) {
  14. seq->insert(seq->end(),(value_type)(*it));
  15. }
  16. #else
  17. seq->insert(pyseq.begin(), pyseq.end());
  18. #endif
  19. }
  20. template <class T>
  21. struct traits_asptr<std::set<T> > {
  22. static int asptr(PyObject *obj, std::set<T> **s) {
  23. return traits_asptr_stdseq<std::set<T> >::asptr(obj, s);
  24. }
  25. };
  26. template <class T>
  27. struct traits_from<std::set<T> > {
  28. static PyObject *from(const std::set<T>& vec) {
  29. return traits_from_stdseq<std::set<T> >::from(vec);
  30. }
  31. };
  32. }
  33. %}
  34. %define %swig_set_methods(set...)
  35. %swig_sequence_iterator(set);
  36. %swig_container_methods(set);
  37. %extend {
  38. void append(value_type x) {
  39. self->insert(x);
  40. }
  41. bool __contains__(value_type x) {
  42. return self->find(x) != self->end();
  43. }
  44. value_type __getitem__(difference_type i) const throw (std::out_of_range) {
  45. return *(swig::cgetpos(self, i));
  46. }
  47. };
  48. %enddef
  49. %include <std/std_set.i>