Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
test12.cc
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // $Id: test12.cc,v 1.4 2006-06-29 15:39:23 gunter Exp $
27 // $Name: not supported by cvs2svn $
28 // ====================================================================
29 // test12.cc
30 //
31 // test for indexing a STL vector
32 //
33 // 2005 Q
34 // ====================================================================
35 #include <boost/python.hpp>
36 #if BOOST_VERSION < 103300
37 #include "vector_indexing_suite.hpp"
38 #else
39 #include <boost/python/suite/indexing/vector_indexing_suite.hpp>
40 #endif
41 
42 #include <vector>
43 #include <iostream>
44 
45 class AClass {
46 private:
47  int ival;
48 
49 public:
50  AClass() : ival(0) {
51  }
52 
53  AClass(const AClass& right) {
54  ival= right.ival;
55  std::cout << "*** copy constructor is called" << std::endl;
56  }
57 
58  ~AClass() { }
59 
60  void SetIVal(int i) { ival= i; }
61  int GetIVal() { return ival; }
62 
63  void Print() const {
64  std::cout << "*** @" << this << ": i="
65  << ival << std::endl;
66  }
67 
68 };
69 
70 typedef std::vector<AClass*> AVector;
71 
72 
73 void PrintVector(const AVector& vec) {
74  std::cout << "*** size of AVector= " << vec.size() << std::endl;
75  for (int i=0; i< vec.size(); i++) {
76  vec[i]-> Print();
77  }
78 }
79 
80 
81 // Boost.Python...
82 
83 using namespace boost::python;
84 
86 {
87  class_<AClass, AClass*>("AClass", "a class")
88  .add_property("ival", &AClass::GetIVal, &AClass::SetIVal)
89  .def("Print", &AClass::Print)
90  ;
91 
92  class_<AVector> ("AVector", "AClass vector")
94  ;
95 
96  def("PrintVector", PrintVector);
97 }
98