AdjoinableMPI
Main Page
Related Pages
Modules
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
window.c
Go to the documentation of this file.
1
/*
2
##########################################################
3
# This file is part of the AdjoinableMPI library #
4
# released under the MIT License. #
5
# The full COPYRIGHT notice can be found in the top #
6
# level directory of the AdjoinableMPI distribution. #
7
##########################################################
8
*/
9
#include <stdlib.h>
10
#include <assert.h>
11
#include <string.h>
12
#include <stdio.h>
13
#include <mpi.h>
14
#include "
ampi/libCommon/modified.h
"
15
#include "
ampi/bookkeeping/support.h
"
16
#include "
ampi/adTool/support.h
"
17
18
19
void
AMPI_WIN_STACK_push
(
AMPI_Win_stack
*s,
AMPI_WinRequest
val) {
20
if
(
AMPI_WIN_STACK_full
(s))
21
AMPI_WIN_STACK_expand
(s);
22
s->
v
[s->
top
] = val;
23
s->
num_reqs
=s->
num_reqs
+1;
24
(s->
top
)=(s->
top
)+1;
25
}
26
27
AMPI_WinRequest
AMPI_WIN_STACK_pop
(
AMPI_Win_stack
*s) {
28
/* We do not shrink the stack. We rather keep the maximum allocation */
29
/*if(empty(s))*/
30
/*shrink(s);*/
31
(s->
top
)=(s->
top
)-1;
32
s->
num_reqs
=s->
num_reqs
-1;
33
return
(s->
v
[s->
top
]);
34
}
35
36
void
AMPI_WIN_STACK_stack_init
(
AMPI_Win_stack
*s) {
37
s->
top
=0;
38
s->
v
= malloc(
sizeof
(
AMPI_WinRequest
)*
AMPI_WINDOW_STACK_CHUNK_SIZE
);
39
s->
size
=
AMPI_WINDOW_STACK_CHUNK_SIZE
;
40
s->
num_reqs
=0;
41
}
42
43
void
AMPI_WIN_STACK_destroy
(
AMPI_Win_stack
*s) {
44
s->
top
=0;
45
free(s->
v
);
46
s->
size
=
AMPI_WINDOW_STACK_CHUNK_SIZE
;
47
}
48
49
int
AMPI_WIN_STACK_full
(
AMPI_Win_stack
*s) {
50
return
(s->
top
>= s->
size
);
51
}
52
53
void
AMPI_WIN_STACK_expand
(
AMPI_Win_stack
*s) {
54
AMPI_WinRequest
*tmp;
55
s->
size
=s->
size
+
AMPI_WINDOW_STACK_CHUNK_SIZE
;
56
tmp=realloc(s->
v
,s->
size
*
sizeof
(
AMPI_WinRequest
));
57
if
(tmp != NULL) {
58
s->
v
= tmp;
59
}
60
}
61
62
void
AMPI_WIN_STACK_shrink
(
AMPI_Win_stack
*s) {
63
AMPI_WinRequest
*tmp;
64
s->
size
=s->
size
-
AMPI_WINDOW_STACK_CHUNK_SIZE
;
65
tmp=realloc(s->
v
,s->
size
*
sizeof
(
AMPI_WinRequest
));
66
if
(tmp != NULL) {
67
s->
v
= tmp;
68
}
69
}
70
71
int
AMPI_WIN_STACK_empty
(
AMPI_Win_stack
*s) {
72
return
(s->
top
<= s->
size
-
AMPI_WINDOW_STACK_CHUNK_SIZE
);
73
}
74
75
void
AMPI_WIN_sync
(
AMPI_Win
win) {
76
/*
77
int size=win.req_stack->num_reqs;
78
int i=0;
79
*/
80
/*printf("num_reqs: %d\n", size);*/
81
/*for(i=0;i<size;i=i+1) {*/
82
/*}*/
83
84
}
Common
window.c
Generated on Mon Feb 22 2016 23:45:09 for AdjoinableMPI by
1.8.4