multiarray 0.2.4 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +5 -2
- data/lib/multiarray.rb +45 -20
- data/lib/multiarray/int.rb +1 -1
- data/lib/multiarray/int_.rb +87 -60
- data/lib/multiarray/lazy.rb +76 -0
- data/lib/multiarray/list.rb +33 -74
- data/lib/multiarray/malloc.rb +11 -0
- data/lib/multiarray/multiarray.rb +19 -1
- data/lib/multiarray/object.rb +36 -19
- data/lib/multiarray/pointer.rb +11 -0
- data/lib/multiarray/pointer_.rb +223 -0
- data/lib/multiarray/sequence.rb +14 -10
- data/lib/multiarray/sequence_.rb +40 -106
- data/lib/multiarray/type.rb +101 -129
- data/test/tc_int.rb +78 -76
- data/test/tc_multiarray.rb +97 -15
- data/test/tc_object.rb +52 -45
- data/test/tc_sequence.rb +89 -106
- data/test/ts_multiarray.rb +0 -1
- metadata +6 -8
- data/lib/multiarray/composite_type.rb +0 -67
- data/lib/multiarray/descriptortype.rb +0 -43
- data/lib/multiarray/memory.rb +0 -112
- data/lib/multiarray/sequence_operation.rb +0 -52
- data/lib/multiarray/storage.rb +0 -23
- data/lib/multiarray/type_operation.rb +0 -32
data/test/ts_multiarray.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multiarray
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Wedekind
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-26 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -37,19 +37,17 @@ files:
|
|
37
37
|
- .document
|
38
38
|
- lib/multiarray.rb
|
39
39
|
- lib/multiarray/sequence_.rb
|
40
|
-
- lib/multiarray/
|
40
|
+
- lib/multiarray/pointer.rb
|
41
41
|
- lib/multiarray/multiarray.rb
|
42
|
+
- lib/multiarray/lazy.rb
|
42
43
|
- lib/multiarray/sequence.rb
|
43
44
|
- lib/multiarray/list.rb
|
44
|
-
- lib/multiarray/
|
45
|
-
- lib/multiarray/type_operation.rb
|
45
|
+
- lib/multiarray/malloc.rb
|
46
46
|
- lib/multiarray/int.rb
|
47
|
+
- lib/multiarray/pointer_.rb
|
47
48
|
- lib/multiarray/type.rb
|
48
|
-
- lib/multiarray/storage.rb
|
49
49
|
- lib/multiarray/object.rb
|
50
50
|
- lib/multiarray/int_.rb
|
51
|
-
- lib/multiarray/memory.rb
|
52
|
-
- lib/multiarray/sequence_operation.rb
|
53
51
|
- test/ts_multiarray.rb
|
54
52
|
- test/tc_multiarray.rb
|
55
53
|
- test/tc_object.rb
|
@@ -1,67 +0,0 @@
|
|
1
|
-
module Hornetseye
|
2
|
-
|
3
|
-
# Abstract class for arrays and composite numbers
|
4
|
-
#
|
5
|
-
# @abstract
|
6
|
-
class CompositeType < Type
|
7
|
-
|
8
|
-
class << self
|
9
|
-
|
10
|
-
# Type of elements this type is composed of
|
11
|
-
#
|
12
|
-
# @return [Type,Sequence_] The element type of this type.
|
13
|
-
attr_accessor :element_type
|
14
|
-
|
15
|
-
# Number of elements this type is composed of
|
16
|
-
#
|
17
|
-
# @return [Integer] The number of elements this type is composed of.
|
18
|
-
attr_accessor :num_elements
|
19
|
-
|
20
|
-
# Returns the type of storage object for storing values
|
21
|
-
#
|
22
|
-
# @return [Class] Returns the storage type for the element type.
|
23
|
-
#
|
24
|
-
# @private
|
25
|
-
def storage
|
26
|
-
element_type.storage
|
27
|
-
end
|
28
|
-
|
29
|
-
# Number of bytes for storing an object of this type
|
30
|
-
#
|
31
|
-
# @return [Integer] Number of bytes to store +num_elements+ elements of
|
32
|
-
# type +element_type+.
|
33
|
-
#
|
34
|
-
# @private
|
35
|
-
def bytesize
|
36
|
-
element_type.bytesize * num_elements
|
37
|
-
end
|
38
|
-
|
39
|
-
# Returns the element type of this composite type
|
40
|
-
#
|
41
|
-
# @return [Class] Returns +element_type.basetype+.
|
42
|
-
#
|
43
|
-
# @private
|
44
|
-
def basetype
|
45
|
-
element_type.basetype
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
# The element type of this object's type
|
51
|
-
#
|
52
|
-
# @return [Type,Sequence_] The element type of this object's type.
|
53
|
-
def element_type
|
54
|
-
self.class.element_type
|
55
|
-
end
|
56
|
-
|
57
|
-
# The number of elements this object's type is composed of
|
58
|
-
#
|
59
|
-
# @return [Integer] The number of elements this object's type is composed
|
60
|
-
# of.
|
61
|
-
def num_elements
|
62
|
-
self.class.num_elements
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module Hornetseye
|
2
|
-
|
3
|
-
# Abstract class for describing scalar data types
|
4
|
-
#
|
5
|
-
# This class is for descriping scalar data types which are known to the Ruby
|
6
|
-
# standard library. I.e. there is a descriptor for +Array#pack+ and
|
7
|
-
# +String#unpack+.
|
8
|
-
#
|
9
|
-
# @see Array#pack
|
10
|
-
# @see String#unpack
|
11
|
-
#
|
12
|
-
# @abstract
|
13
|
-
class DescriptorType < Type
|
14
|
-
|
15
|
-
class << self
|
16
|
-
|
17
|
-
# Convert a Ruby object to a string containing the native representation
|
18
|
-
#
|
19
|
-
# @return [String] A string with the native representation of the value.
|
20
|
-
#
|
21
|
-
# @see Array#pack
|
22
|
-
#
|
23
|
-
# @private
|
24
|
-
def pack( value )
|
25
|
-
[ value ].pack descriptor
|
26
|
-
end
|
27
|
-
|
28
|
-
# Convert a string with the native representation to a Ruby object
|
29
|
-
#
|
30
|
-
# @return [Object] The corresponding Ruby object to the native value.
|
31
|
-
#
|
32
|
-
# @see String#unpack
|
33
|
-
#
|
34
|
-
# @private
|
35
|
-
def unpack( value )
|
36
|
-
value.unpack( descriptor ).first
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
data/lib/multiarray/memory.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
module Hornetseye
|
2
|
-
|
3
|
-
# Class for creating views on raw memory
|
4
|
-
#
|
5
|
-
# @see Storage
|
6
|
-
# @see List
|
7
|
-
# @private
|
8
|
-
class Memory < Storage
|
9
|
-
|
10
|
-
class << self
|
11
|
-
|
12
|
-
# Create a +Memory+ object viewing a new +Malloc+ object
|
13
|
-
#
|
14
|
-
# @param [Integer] bytesize Number of bytes to allocate.
|
15
|
-
# @return [Memory] The new +Memory+ object.
|
16
|
-
#
|
17
|
-
# @see Malloc
|
18
|
-
# @private
|
19
|
-
def alloc( bytesize )
|
20
|
-
Memory.new Malloc.new( bytesize )
|
21
|
-
end
|
22
|
-
|
23
|
-
# Create a +Memory+ object viewing a new +Malloc+ object initialised with
|
24
|
-
# the content of a string
|
25
|
-
#
|
26
|
-
# @param [String] str A Ruby string with data to write to memory.
|
27
|
-
# object.
|
28
|
-
# @return [Memory] The new +Memory+ object initialised with the data.
|
29
|
-
#
|
30
|
-
# @private
|
31
|
-
def import( str )
|
32
|
-
retval = alloc str.bytesize
|
33
|
-
retval.import str
|
34
|
-
retval
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
# Create zero-offset view on a +Malloc+ object
|
40
|
-
#
|
41
|
-
# @param [Malloc] ptr A +Malloc+ object with the raw data.
|
42
|
-
#
|
43
|
-
# @private
|
44
|
-
def initialize( ptr )
|
45
|
-
super ptr
|
46
|
-
end
|
47
|
-
|
48
|
-
# Read an element from the memory
|
49
|
-
#
|
50
|
-
# @param [Type] typecode Information for converting native data type to
|
51
|
-
# a Ruby object.
|
52
|
-
# @return [Object] The element from the memory.
|
53
|
-
#
|
54
|
-
# @see #store
|
55
|
-
# @see List#load
|
56
|
-
# @private
|
57
|
-
def load( typecode )
|
58
|
-
typecode.unpack export( typecode.bytesize )
|
59
|
-
end
|
60
|
-
|
61
|
-
# Write an element to the memory
|
62
|
-
#
|
63
|
-
# @param [Type] typecode Information for converting Ruby object to native
|
64
|
-
# data type.
|
65
|
-
# @return [Object] Returns the parameter +value+.
|
66
|
-
#
|
67
|
-
# @see #load
|
68
|
-
# @see List#store
|
69
|
-
# @private
|
70
|
-
def store( typecode, value )
|
71
|
-
import typecode.pack( value )
|
72
|
-
value
|
73
|
-
end
|
74
|
-
|
75
|
-
# Write multiple elements to memory
|
76
|
-
#
|
77
|
-
# @param [String] data A ruby string with data to write to memory.
|
78
|
-
# @return [String] The parameter +data+.
|
79
|
-
#
|
80
|
-
# @see #export
|
81
|
-
# @see List#import
|
82
|
-
# @private
|
83
|
-
def import( data )
|
84
|
-
@data.write data
|
85
|
-
end
|
86
|
-
|
87
|
-
# Read multiple elements from memory
|
88
|
-
#
|
89
|
-
# @param [Integer] bytesize Number of bytes to read from memory.
|
90
|
-
# @return [String] A Ruby string with the resulting data.
|
91
|
-
#
|
92
|
-
# @see #import
|
93
|
-
# @see List#export
|
94
|
-
# @private
|
95
|
-
def export( bytesize )
|
96
|
-
@data.read bytesize
|
97
|
-
end
|
98
|
-
|
99
|
-
# Create a new view with the specified offset
|
100
|
-
#
|
101
|
-
# @param [Integer] offset A non-negative offset.
|
102
|
-
# @return [Memory] A new view for the specified part of the memory.
|
103
|
-
#
|
104
|
-
# @see List#+
|
105
|
-
# @private
|
106
|
-
def +( offset )
|
107
|
-
Memory.new @data + offset
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
module Hornetseye
|
2
|
-
|
3
|
-
# @private
|
4
|
-
module SequenceOperation
|
5
|
-
|
6
|
-
# @private
|
7
|
-
def set( value = typecode.default )
|
8
|
-
if value.is_a? Array
|
9
|
-
for i in 0 ... num_elements
|
10
|
-
assign i, i < value.size ? value[ i ] : typecode.default
|
11
|
-
end
|
12
|
-
else
|
13
|
-
op( value ) { |x| set x }
|
14
|
-
end
|
15
|
-
value
|
16
|
-
end
|
17
|
-
|
18
|
-
# @private
|
19
|
-
def get
|
20
|
-
self
|
21
|
-
end
|
22
|
-
|
23
|
-
# @private
|
24
|
-
def sel( *indices )
|
25
|
-
if indices.empty?
|
26
|
-
super *indices
|
27
|
-
else
|
28
|
-
unless ( 0 ... num_elements ).member? indices.last
|
29
|
-
raise "Index must be in 0 ... #{num_elements} " +
|
30
|
-
"(was #{indices.last.inspect})"
|
31
|
-
end
|
32
|
-
element_storage = @storage + indices.last * stride * typecode.bytesize
|
33
|
-
element_type.wrap( element_storage ).sel *indices[ 0 ... -1 ]
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# @private
|
38
|
-
def op( *args, &action )
|
39
|
-
for i in 0 ... num_elements
|
40
|
-
sub_args = args.collect do |arg|
|
41
|
-
arg.is_a?( Sequence_ ) ? arg[ i ] : arg
|
42
|
-
end
|
43
|
-
sel( i ).op *sub_args, &action
|
44
|
-
end
|
45
|
-
self
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
Sequence_.class_eval { include SequenceOperation }
|
51
|
-
|
52
|
-
end
|
data/lib/multiarray/storage.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module Hornetseye
|
2
|
-
|
3
|
-
# Abstract class inherited by +Memory+ and +List+
|
4
|
-
#
|
5
|
-
# @see Memory
|
6
|
-
# @see List
|
7
|
-
#
|
8
|
-
# @private
|
9
|
-
# @abstract
|
10
|
-
class Storage
|
11
|
-
|
12
|
-
# Create storage object based on raw data or Ruby array
|
13
|
-
#
|
14
|
-
# @param [Malloc,Array] data Delegate object for storing the data.
|
15
|
-
#
|
16
|
-
# @private
|
17
|
-
def initialize( data )
|
18
|
-
@data = data
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Hornetseye
|
2
|
-
|
3
|
-
# @private
|
4
|
-
module TypeOperation
|
5
|
-
|
6
|
-
# @private
|
7
|
-
def set( value = typecode.default )
|
8
|
-
@storage.store self.class, value
|
9
|
-
value
|
10
|
-
end
|
11
|
-
|
12
|
-
# @private
|
13
|
-
def get
|
14
|
-
@storage.load self.class
|
15
|
-
end
|
16
|
-
|
17
|
-
# @private
|
18
|
-
def sel
|
19
|
-
self
|
20
|
-
end
|
21
|
-
|
22
|
-
# @private
|
23
|
-
def op( *args, &action )
|
24
|
-
instance_exec *args, &action
|
25
|
-
self
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
Type.class_eval { include TypeOperation }
|
31
|
-
|
32
|
-
end
|