00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
#include <stdio.h>
00037
#include <stdlib.h>
00038
00039
#include "idseq-base.h"
00040
#include "idima-private.h"
00041
00042 #define DEBUG 0
00043
00044
00045
00046
00047
00048
00049
00062
PPPPSEQUENCE
00063 IdSeqAlloc(
int sx,
int sy,
int sz,
int sb,
int ty)
00064 {
00065
PRIVATE_SEQUENCE *pseq;
00066
PPPPSEQUENCE pv = NULL;
00067
int ibloc, iplan, iligne;
00068
00069
if (!(ty &
IDO_TYPE) ==
SEQ) {
00070 printf
00071 (
"Allocation impossible. Objet de type incompatible.");
00072
return (
PPPPSEQUENCE) 0;
00073 }
00074
00075 pseq = (
PRIVATE_SEQUENCE *)
00076 calloc(1,
sizeof(
PRIVATE_SEQUENCE) + sb *
sizeof(
void ***));
00077
00078
if (pseq ==NULL) {
00079 printf
00080 (
"Echec d'allocation PRIVATE_SEQUENCE.");
00081
return (
PPPPSEQUENCE) NULL;
00082 }
00083
00084
if (
DEBUG) printf(
"pseq %p\n",pseq);
00085
00086
00087 pseq->
_fichier = 0;
00088 pseq->
_message = 0;
00089 pv = (
PPPPSEQUENCE) & pseq[1];
00090
00091
IdSeqDimX(pv) = sx;
00092
IdSeqDimY(pv) = sy;
00093
IdSeqDimZ(pv) = sz;
00094
IdSeqDimT(pv) = sb;
00095
00096
IdSeqUsedNbX(pv) = 0;
00097
IdSeqUsedNbY(pv) = 0;
00098
IdSeqUsedNbZ(pv) = 0;
00099
IdSeqUsedNbT(pv) = 0;
00100
00101
IdSeqType(pv) = ty;
00102 pseq->
subObject = 0;
00103
00104
00105
00106
00107 sx = ((ty &
TY_SIZE) ==
TY_BIT) ? ((sx + 7) >> 3) : sx;
00108
00109 pv[0] = (
void ***) malloc( sb * sz *
sizeof(
void *));
00110
00111
if (pv[0] == NULL) {
00112 printf(
"Echec Alloc Sequence (pointeurs sur Plans)\n");
00113 free(pseq);
00114
return (
PPPPSEQUENCE) NULL;
00115 }
00116
if (
DEBUG) printf(
"IdSeqAlloc : pv[0] : %p\n", pv[0]);
00117
00118 pv[0][0] = (
void **) malloc( sb * sz * sy *
sizeof(
void *) );
00119
00120
if (pv[0][0] == NULL) {
00121 printf(
"Echec Alloc Sequence (pointeurs sur Lignes)\n");
00122 free(pv[0]);
00123 free(pseq);
00124
return (
PPPPSEQUENCE) NULL;
00125 }
00126
00127
if (
DEBUG) printf(
"IdSeqAlloc : pv[0][0] : %p\n", pv[0][0]);
00128
00129 pv[0][0][0] = (
void *) malloc( sb * sz * sy * sx *
IdSizeOfType(pv));
00130
00131
if (pv[0][0][0] == NULL) {
00132 printf(
"Echec Alloc Sequence (seqxels)\n");
00133 free(pv[0][0]);
00134 free(pv[0]);
00135 free(pseq);
00136
return (
PPPPSEQUENCE) NULL;
00137 }
00138
00139
if (
DEBUG) printf(
"IdSeqAlloc : pv[0][0][0] : %p\n", pv[0][0][0]);
00140
00141
for (ibloc = 0; ibloc < sb; ibloc++) {
00142 pv[ibloc]= pv[0] + ibloc * sz;
00143
if (
DEBUG) printf(
"ibloc : pv[%d] %p\n", ibloc, pv[ibloc]);
00144 }
00145
00146
for (ibloc = 0; ibloc < sb; ibloc++) {
00147
for (iplan = 0; iplan < sz; iplan++) {
00148 pv[ibloc][iplan]= pv[0][0] + (ibloc*sz + iplan) * sy;
00149
if (
DEBUG) printf(
" plan : pv[%d][%d] %p \n", ibloc, iplan,pv[ibloc][iplan]);
00150
00151 }
00152 }
00153
00154
for (ibloc = 0; ibloc < sb; ibloc++) {
00155
for (iplan = 0; iplan < sz; iplan++) {
00156
for (iligne=0; iligne<sy; iligne++) {
00157 pv[ibloc][iplan][iligne] = (( (
char *)pv[0][0][0])
00158 + ((ibloc*sz + iplan) * sy + iligne )*sx*
IdSizeOfType(pv) );
00159
if (
DEBUG) printf(
" iligne : pv[%d][%d][%d] %p\n",
00160 ibloc, iplan, iligne, pv[ibloc][iplan][iligne]);
00161 }
00162 }
00163 }
00164
return (pv);
00165 }
00166
00167
00173
void
00174 _IdSeqFree(PPPPSEQUENCE * pv)
00175 {
00176
if (*pv) {
00177
if (
_IdSeqPrivate(*pv)->subObject == 0) {
00178
00179
00180
00181
if(
DEBUG) printf(
"Liberation des seqxels car PAS un ss-objet\n");
00182 free((*pv)[0][0][0]);
00183 }
00184
00185
if(
DEBUG) printf(
"Liberation Pointeurs Plans\n");
00186 free((*pv)[0][0]);
00187
if(
DEBUG) printf(
"Liberation Pointeurs Volumes\n");
00188 free((*pv)[0]);
00189
if(
DEBUG) printf(
"fin Liberation Pointeurs Volumes\n");
00190
00191
if (
_IdSeqPrivate(*pv)->_message) {
00192
if(
DEBUG) printf(
"Liberation _message\n");
00193 free((
_IdSeqPrivate(*pv)->_message));
00194 }
00195
00196
if (
_IdSeqPrivate(*pv)->_fichier) {
00197
if(
DEBUG) printf(
"Liberation _fichier\n");
00198 free((
_IdSeqPrivate(*pv)->_fichier));
00199 }
00200
if(
DEBUG) printf(
"Liberation _IdSeqPrivate\n");
00201 free(
_IdSeqPrivate(*pv));
00202 *pv = 0;
00203 }
00204 }