1 |
|
2 |
/******************************************************* |
3 |
* |
4 |
* Copyright (c) 2003-2008 by University of Queensland |
5 |
* Earth Systems Science Computational Center (ESSCC) |
6 |
* http://www.uq.edu.au/esscc |
7 |
* |
8 |
* Primary Business: Queensland, Australia |
9 |
* Licensed under the Open Software License version 3.0 |
10 |
* http://www.opensource.org/licenses/osl-3.0.php |
11 |
* |
12 |
*******************************************************/ |
13 |
|
14 |
|
15 |
/**************************************************************/ |
16 |
|
17 |
/* Paso: pattern */ |
18 |
|
19 |
/**************************************************************/ |
20 |
|
21 |
/* Author: gross@access.edu.au */ |
22 |
|
23 |
/**************************************************************/ |
24 |
|
25 |
#ifndef INC_PASO_PATTERN |
26 |
#define INC_PASO_PATTERN |
27 |
|
28 |
#include "Common.h" |
29 |
|
30 |
/**************************************************************/ |
31 |
|
32 |
#define PATTERN_FORMAT_DEFAULT 0 |
33 |
#define PATTERN_FORMAT_SYM 1 |
34 |
#define PATTERN_FORMAT_OFFSET1 2 |
35 |
|
36 |
typedef struct Paso_Pattern { |
37 |
int type; |
38 |
dim_t numOutput; |
39 |
dim_t numInput; |
40 |
dim_t input_block_size; /* logical block size in the input */ |
41 |
dim_t output_block_size; /* logical block size in the output */ |
42 |
dim_t block_size; /* = input_block_size * output_block_size */ |
43 |
|
44 |
dim_t len; |
45 |
index_t* ptr; |
46 |
index_t* index; |
47 |
dim_t reference_counter; |
48 |
} Paso_Pattern; |
49 |
|
50 |
#define INDEXLIST_LENGTH 85 |
51 |
|
52 |
typedef struct Paso_IndexList { |
53 |
index_t index[INDEXLIST_LENGTH]; |
54 |
dim_t n; |
55 |
struct Paso_IndexList *extension; |
56 |
} Paso_IndexList; |
57 |
/* interfaces: */ |
58 |
|
59 |
Paso_Pattern* Paso_Pattern_alloc(int type, dim_t input_block_size, dim_t output_block_size, dim_t numOutput, dim_t numInput, index_t* ptr, index_t* index); |
60 |
Paso_Pattern* Paso_Pattern_getReference(Paso_Pattern*); |
61 |
void Paso_Pattern_free(Paso_Pattern*); |
62 |
int Paso_comparIndex(const void *,const void *); |
63 |
Paso_Pattern* Paso_Pattern_unrollBlocks(Paso_Pattern*,int, dim_t,dim_t); |
64 |
Paso_Pattern* Paso_Pattern_getSubpattern(Paso_Pattern*,dim_t,dim_t,index_t*,index_t*); |
65 |
bool_t Paso_Pattern_isEmpty(Paso_Pattern* in); |
66 |
void Paso_Pattern_mis(Paso_Pattern* pattern_p, index_t* mis_marker); |
67 |
void Paso_Pattern_reduceBandwidth(Paso_Pattern* self,index_t* oldToNew); |
68 |
void Paso_Pattern_color(Paso_Pattern* patter, index_t* num_colors, index_t* colorOf); |
69 |
Paso_Pattern* Paso_Pattern_multiply(int type, Paso_Pattern* A, Paso_Pattern* B); |
70 |
Paso_Pattern* Paso_Pattern_binop(int type, Paso_Pattern* A, Paso_Pattern* B); |
71 |
|
72 |
void Paso_IndexList_insertIndex(Paso_IndexList*, index_t); |
73 |
void Paso_IndexList_toArray(Paso_IndexList*, index_t*, index_t, index_t, index_t); |
74 |
dim_t Paso_IndexList_count(Paso_IndexList*, index_t, index_t); |
75 |
void Paso_IndexList_free(Paso_IndexList*); |
76 |
Paso_Pattern* Paso_IndexList_createPattern(dim_t n0, dim_t n,Paso_IndexList* index_list,index_t range_min,index_t range_max, index_t index_offset); |
77 |
|
78 |
#endif /* #ifndef INC_PASO_SYSTEMPATTERN */ |