summaryrefslogtreecommitdiffhomepage
path: root/doc/api/array.h.md
blob: 33466e1497f425bfde4c99f87c739520cff4f10a (plain)
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
### mrb_ary_new

```C
mrb_value mrb_ary_new(mrb_state *mrb);
```
Initializes an array.
#### Example
In this example we read from a Ruby file inside C. The Ruby code will print what you pass as an argument and what class the passed in value is. In this case we are declaring a variable new_ary of data type mrb_value. Then we are initializing it with the mrb_ary_new function which only takes an mruby state as an argument.
```C
#include <stdio.h>
#include <mruby.h>
#include "mruby/array.h" // Need the array header.
#include "mruby/compile.h"


int main(int argc, char *argv[])
{	
	  mrb_value new_ary; // Declare variable.
	  mrb_state *mrb = mrb_open();
    if (!mrb) { /* handle error */ }
    FILE *fp = fopen("test.rb","r");
	  new_ary = mrb_ary_new(mrb);
    mrb_value obj = mrb_load_file(mrb,fp);
    mrb_funcall(mrb, obj, "method_name", 1, new_ary);
    fclose(fp);
    mrb_close(mrb);
	return 0;
}
```
test.rb
```Ruby
class Example_Class
	def method_name(a)
		puts a
		puts a.class
	end
end
Example_Class.new
```

### mrb_ary_push
```C
void mrb_ary_push(mrb_state*, mrb_value, mrb_value);
```
Pushes given value into an array.
#### Example
In this example we read from a Ruby file inside C. The Ruby code will print what you pass as an argument and what class the passed in value is. In this case after initializing our array. We are declaring two variables with the mrb_int data type random_value1 & random_value2 and we initialize them 70 and 60 respectively. Then we use the mrb_ary_push function to push values those values into the array. 
```C
#include <stdio.h>
#include <mruby.h>
#include "mruby/array.h" // Need the array header.
#include "mruby/compile.h"

int main(int argc, char *argv[])
{	
	  mrb_value new_ary; // Declare variable.
	  mrb_int random_value1 = 70; // Initialize variable
	  mrb_int random_value2 = 60; // Initialize variable
	  mrb_state *mrb = mrb_open();
    if (!mrb) { /* handle error */ }
    FILE *fp = fopen("test.rb","r");
	  new_ary = mrb_ary_new(mrb); // Initialize ruby array.
	  /* Pushes the fixnum value from random_value1 to the new_ary instance. */
	  mrb_ary_push(mrb, new_ary, mrb_fixnum_value(random_value1)); 
	  /* Pushes the fixnum value from random_value2 to the new_ary instance. */
	  mrb_ary_push(mrb, new_ary, mrb_fixnum_value(random_value2));
    mrb_value obj = mrb_load_file(mrb,fp);
    mrb_funcall(mrb, obj, "method_name", 1, new_ary);
    fclose(fp);
    mrb_close(mrb);
	  return 0;
}
```
test.rb
```Ruby
class Example_Class
	def method_name(a)
		puts a
		puts a.class
	end
end
Example_Class.new
```
#### Result
After compiling you should get these results.
```Ruby
[70, 60]
Array
```

## mrb_ary_pop
```C
mrb_value mrb_ary_pop(mrb_state *mrb, mrb_value ary);
```
Pops the last element from the array.
#### Example
In this example we read from a Ruby file inside C. The Ruby code will print what you pass as an argument and what class the passed in value is. In this case after initializing our array. We are declaring two variables with the mrb_int data type random_value1 & random_value2 and we initialize them 70 and 60 respectively. Then we use the mrb_ary_push function to push values those values into the array. Now here in the Ruby files we add another method
called pop_ary that will return the array alone(just to be clean) and you should see the last element gone.
```C
#include <stdio.h>
#include <mruby.h>
#include "mruby/array.h" // Need the array header.
#include "mruby/compile.h"

int main(int argc, char *argv[])
{	
	  mrb_value new_ary; // Declare variable.
	  mrb_int random_value1 = 70; // Initialize variable
	  mrb_int random_value2 = 60; // Initialize variable
	  mrb_state *mrb = mrb_open();
    if (!mrb) { /* handle error */ }
    FILE *fp = fopen("test.rb","r");
	  new_ary = mrb_ary_new(mrb); // Initialize ruby array.
	  /* Pushes the fixnum value from random_value1 to the new_ary instance. */
	  mrb_ary_push(mrb, new_ary, mrb_fixnum_value(random_value1)); 
	  /* Pushes the fixnum value from random_value2 to the new_ary instance. */
	  mrb_ary_push(mrb, new_ary, mrb_fixnum_value(random_value2));
    mrb_value obj = mrb_load_file(mrb,fp);
    mrb_funcall(mrb, obj, "method_name", 1, new_ary);
    mrb_ary_pop(mrb, new_ary); // Pops the last element of the array. In this case 60.
    mrb_funcall(mrb, obj, "pop_ary", 1, new_ary); // Calls the method again to show the results.
    fclose(fp);
    mrb_close(mrb);
	  return 0;
}
```
test.rb
```Ruby
class Example_Class
	def method_name(a)
		puts a
		puts a.class
	end
	def pop_ary(a)
		puts a
	end
end
Example_Class.new
```
#### Result
After compiling you should get these results.
```Ruby
[70, 60]
Array
[70]
```
## mrb_ary_ref
```C
mrb_value mrb_ary_ref(mrb_state *mrb, mrb_value ary, mrb_int n);
```
Returns a reference to an element of the array. Specified by the value given to mrb_int n.
#### Example
In this example we read from a Ruby file inside C. The Ruby code will print what you pass as an argument and what class the passed in value is. In this case we're declaring a variable ary_ref with the data type of mrb_value. Then we assign mrb_ary_ref to it getting new_ary's value at index 1.
```C
#include <stdio.h>
#include <mruby.h>
#include "mruby/array.h" // Need the array header.
#include "mruby/compile.h"

int main(int argc, char *argv[])
{	
    mrb_value ary_ref; // Declare variable.
	  mrb_value new_ary; // Declare variable.
	  mrb_int random_value1 = 70; // Initialize variable
	  mrb_int random_value2 = 60; // Initialize variable
	  mrb_state *mrb = mrb_open();
    if (!mrb) { /* handle error */ }
    FILE *fp = fopen("test.rb","r");
	  new_ary = mrb_ary_new(mrb); // Initialize ruby array.
	  /* Pushes the fixnum value from random_value1 to the new_ary instance. */
	  mrb_ary_push(mrb, new_ary, mrb_fixnum_value(random_value1)); 
	  /* Pushes the fixnum value from random_value2 to the new_ary instance. */
	  mrb_ary_push(mrb, new_ary, mrb_fixnum_value(random_value2));
	  ary_ref = mrb_ary_ref(mrb, new_ary, 1); // Gets the value of new_ary's second element at index 1. 
    mrb_value obj = mrb_load_file(mrb,fp);
    /* Passing the value from ary_ref to the method method_name.*/
    mrb_funcall(mrb, obj, "method_name", 1, ary_ref);
    fclose(fp);
    mrb_close(mrb);
	  return 0;
}
```
test.rb
```Ruby
class Example_Class
	def method_name(a)
		puts a
		puts a.class
	end
end
Example_Class.new
```
#### Result
After compiling you should get these results.
```Ruby
60
Fixnum
```

### mrb_ary_set
```C
void mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val);
```
Sets a value to an index.
#### Example
In this example we read from a Ruby file inside C. The Ruby code will print what you pass as an argument and what class the passed in value is. In this case we're declaring a variable ary_ref with the data type of mrb_value. Then we assign mrb_ary_ref to it getting new_ary's value at index 1.
```C
#include <stdio.h>
#include <mruby.h>
#include "mruby/array.h" // Need the array header.
#include "mruby/compile.h"

int main(int argc, char *argv[])
{	
	  mrb_value new_ary;
	  mrb_value ary_obj;
	  mrb_int random_value1 = 70;
	  mrb_int random_value2 = 60;
	  mrb_state *mrb = mrb_open();
    if (!mrb) { /* handle error */ }
    FILE *fp = fopen("test.rb","r");
	  new_ary = mrb_ary_new(mrb);
	  mrb_ary_push(mrb, new_ary, mrb_fixnum_value(random_value1));
	  mrb_ary_push(mrb, new_ary, mrb_fixnum_value(random_value2));
	  /* Sets the fixnum value of 7 to the second index of the array.*/
	  mrb_ary_set(mrb, new_ary, 2, mrb_fixnum_value(7));
    mrb_value obj = mrb_load_file(mrb,fp);
    mrb_funcall(mrb, obj, "before_after", 1, new_ary);
    fclose(fp);
    mrb_close(mrb);
	  return 0;
}
```
test.rb
```Ruby
class Example_Class
	def method_name(a)
		puts a
		puts a.class
	end
	def before_after(a)
		puts a
	end
end
Example_Class.new
```
#### Result
After compiling you should get these results.
```Ruby
[70, 60, 7]
```