PageRenderTime 39ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/python/std_set.i

#
Swig | 55 lines | 43 code | 9 blank | 3 comment | 0 complexity | 062d79754992c132ac6bcdbb197efcf6 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 SwigPySeq, class T>
  8. inline void
  9. assign(const SwigPySeq& swigpyseq, std::set<T>* seq) {
  10. // seq->insert(swigpyseq.begin(), swigpyseq.end()); // not used as not always implemented
  11. typedef typename SwigPySeq::value_type value_type;
  12. typename SwigPySeq::const_iterator it = swigpyseq.begin();
  13. for (;it != swigpyseq.end(); ++it) {
  14. seq->insert(seq->end(),(value_type)(*it));
  15. }
  16. }
  17. template <class T>
  18. struct traits_asptr<std::set<T> > {
  19. static int asptr(PyObject *obj, std::set<T> **s) {
  20. return traits_asptr_stdseq<std::set<T> >::asptr(obj, s);
  21. }
  22. };
  23. template <class T>
  24. struct traits_from<std::set<T> > {
  25. static PyObject *from(const std::set<T>& vec) {
  26. return traits_from_stdseq<std::set<T> >::from(vec);
  27. }
  28. };
  29. }
  30. %}
  31. %define %swig_set_methods(set...)
  32. %swig_sequence_iterator(set);
  33. %swig_container_methods(set);
  34. %extend {
  35. void append(value_type x) {
  36. self->insert(x);
  37. }
  38. bool __contains__(value_type x) {
  39. return self->find(x) != self->end();
  40. }
  41. value_type __getitem__(difference_type i) const throw (std::out_of_range) {
  42. return *(swig::cgetpos(self, i));
  43. }
  44. };
  45. %enddef
  46. %include <std/std_set.i>