File: scalar_array.h

package info (click to toggle)
python-visual 3.2.9-4.1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 2,796 kB
  • ctags: 2,664
  • sloc: cpp: 11,958; sh: 8,185; python: 3,709; ansic: 480; makefile: 311
file content (151 lines) | stat: -rw-r--r-- 3,175 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#ifndef VISUAL_SCALAR_ARRAY_H
#define VISUAL_SCALAR_ARRAY_H

// Copyright (c) 2000, 2001, 2002, 2003 by David Scherer and others.
// See the file license.txt for complete license terms.
// See the file authors.txt for a complete list of contributors.

#include "vector.h"
#include <deque>

#include <boost/python/numeric.hpp>
#include <boost/python/handle.hpp>

namespace visual {

class vector_array;

class scalar_array
{
 private:
	std::deque<double> data;
	friend class vector_array;
	
 public:
	typedef std::deque<double>::iterator iterator;
	typedef std::deque<double>::const_iterator const_iterator;
	
	inline scalar_array( int size = 0, double fill = 0)
		: data( size, fill) {}
	
	// Construct from a continuous 1-D sequence (tuple or list)
	explicit scalar_array( const boost::python::list& sequence);
	explicit scalar_array( const boost::python::numeric::array& sequence);
	
	inline scalar_array( const scalar_array& other)
		: data( other.data) {}
	
	boost::python::numeric::array
	as_array() const;
	
	inline iterator
	begin() { return data.begin(); }
	
	inline const_iterator
	begin() const { return data.begin(); }
	
	inline iterator
	end() { return data.end(); }
	
	inline const_iterator
	end() const { return data.end(); }
		
	// Append a single element to the array.
	void append( const double& s);
	
	// Prepend a single element the the array.
	void prepend( const double& s);
	
	// Remove a single element from the beginning of the array
	void head_clip();
	// Remove i elemnts from the beginning of the array.
	void head_crop( int i);
	// Remove a single element from the end of the array.
	void tail_clip();
	// Remove i elements from the end of the array.
	void tail_crop( int i);
	
	scalar_array
	operator*( const double& s) const;
	
	scalar_array
	operator*( const scalar_array& s) const;
	
	vector_array
	operator*( const vector_array& v) const;

	vector_array
	operator*( const vector& v) const;
	
	const scalar_array&
	operator*=( const double& s);
	
	const scalar_array&
	operator*=( const scalar_array& s);
	
	scalar_array
	operator/( const double& s) const;
	
	scalar_array
	operator/( const scalar_array& s) const;
	
	const scalar_array&
	operator/=( const double& s);
	
	const scalar_array&
	operator/=( const scalar_array& s);
	
	scalar_array
	operator+( const scalar_array& s) const;
	
	scalar_array
	operator+( const double& s) const;
	
	const scalar_array&
	operator+=( const double& s);
	
	const scalar_array&
	operator+=( const scalar_array& s);
	
	scalar_array
	operator-( const scalar_array& s) const;
	
	scalar_array
	operator-( const double& s) const;
	
	const scalar_array&
	operator-=( const double& s);
	
	const scalar_array&
	operator-=( const scalar_array& s);
	
	scalar_array
	operator-() const;
	
	inline double&
	operator[]( int i) { return data[i]; }
	
	inline const double&
	operator[]( int i) const { return data[i]; }
	
	// Returns the number of elemnts in the array.
	inline int 
	size() const { return data.size(); }
	
	double
	py_getitem( int index);
	
	void
	py_setitem( int index, double value);

	double
	sum() const;

};

void scalar_array_init_type();
	
	
} // !namepace visual

#endif // !VISUAL_SCALAR_ARRAY_H