VIA - Volumetric Image Analysis
Volumes.h
1 /*
2 ** Include file to be used in conjuntion with the volume set (Volumes)
3 ** data type.
4 **
5 ** Author:
6 ** G.Lohmann, <lohmann@cns.mpg.de>, Jan. 1996
7 */
8 
9 #include <stdio.h>
10 
11 #define MAXHASHLEN 1024 /* max length of hash table */
12 
13 typedef struct VTrackStruct {
14  short band;
15  short row;
16  short col;
17  short length;
18  struct VTrackStruct *next;
19  struct VTrackStruct *previous;
20 } *VTrack, VTrackRec;
21 
22 
23 typedef struct VBucketStruct {
24  short ntracks; /* number of tracks in one hashtable bucket */
25  VTrack first; /* ptr to first track in bucket */
26  VTrack last; /* ptr to last track in bucket */
27 } *VBucket, VBucketRec;
28 
29 typedef struct VolumeStruct {
30  short label;
31  short nbands;
32  short nrows;
33  short ncolumns;
34  short nbuckets; /* length of hash table (number of buckets) */
35  int ntracks; /* total number of tracks in all buckets */
36  VBucket bucket; /* ptrs to buckets */
37  struct VolumeStruct *next;
38 } VolumeRec, *Volume;
39 
40 
41 typedef struct V_VolumesRec {
42  VAttrList attributes;
43  short nvolumes; /* number of volumes in list */
44  short nbands;
45  short nrows;
46  short ncolumns;
47  Volume first; /* ptr to first volume in list */
48 } VolumesRec;
49 
50 #define VolumesAttrList(volumes) ((volumes)->attributes)
51 #define VolumesNum(volumes) ((volumes)->nvolumes)
52 #define VolumesNBands(volumes) ((volumes)->nbands)
53 #define VolumesNRows(volumes) ((volumes)->nrows)
54 #define VolumesNColumns(volumes) ((volumes)->ncolumns)
55 #define VolumesNVolumes(volumes) ((volumes)->ntracks)
56 /*
57 #define VolumesNTracks(volumes) ((volumes)->ntracks)
58 */
59 
60 #define VolumeNBands(volume) ((volume)->nbands)
61 #define VolumeNRows(volume) ((volume)->nrows)
62 #define VolumeNColumns(volume) ((volume)->ncolumns)
63 #define VolumeNBuckets(volume) ((volume)->nbuckets)
64 #define VolumeNTracks(volume) ((volume)->ntracks)
65 #define VolumeLabel(volume) ((volume)->label)
66 #define VFirstVolume(volumes) ((volumes)->first)
67 #define VNextVolume(volume) ((volume)->next)
68 #define VolumeExists(volume) ((volume) != NULL)
69 
70 #define VTrackLength(track) ((track)->length)
71 #define VTrackExists(track) ((track) != NULL)
72 #define VFirstTrack(volume,i) ((volume)->bucket[(i)].first)
73 #define VNextTrack(track) ((track)->next)
74 #define VPreviousTrack(track) ((track)->previous)
75 
76 #define VolumesAttr "volumes"
77 #define VolNVolumesAttr "nvolumes"
78 #define VolNTracksAttr "ntracks"
79 #define VolNBandsAttr "nbands"
80 #define VolNRowsAttr "nrows"
81 #define VolNColumnsAttr "ncolumns"
82 
83 extern Volumes VCreateVolumes(short,short,short);
84 extern Volumes VCopyVolumes(Volumes);
85 extern void VDestroyVolumes(Volumes);
86 extern VBoolean VWriteVolumes(FILE *, VAttrList, int, Volumes *);
87 
88 extern int VReadVolumes(FILE *, VAttrList *, Volumes **);
89 
90 extern Volume VCreateVolume(short,short,short,short,short);
91 extern Volume VCopyVolume(Volume);
92 extern void VAddVolume(Volumes, Volume);
93 extern void AddTrack(Volume,VTrack);
94 
95 extern double VolumeBorderSize(Volume);
96 extern VBoolean VolumeBorder(Volume,short,short,short);
97 extern VTrack VolumeGetTrack(Volume,short,short,short);
98 extern VBoolean VolumeInside(Volume,short,short,short);
99 extern double VolumeRadius(Volume,double *);
100 
101 /*
102 ** hash function
103 */
104 #define VolumeHash(nbands, b, r, len) (((b) * (nbands) + (r)) % (len))