本文整理汇总了C++中INDEX函数的典型用法代码示例。如果您正苦于以下问题:C++ INDEX函数的具体用法?C++ INDEX怎么用?C++ INDEX使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了INDEX函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: create_chunk
void create_chunk( int N_u, int N_v, int N_r,
double r_min, double r_max, double gamma,
long nnodes, pvo_float3_t* pts,
long ncells, int* cia, int* cja, uint8_t* types,
double* U, float* V )
{
int iu, iv, ir, i, k;
double theta, phi, r, t, u, v, z;
// Mesh spacing
double dr = (r_max - r_min)/N_r;
/* We compute the values on the sphere by projection from the
plane with this z value on the sphere. The closer this value
is to 1.0, the lower is the curvature
*/
z = sqrt(0.5*(1 - gamma*gamma));
for( ir = 0; ir <= N_r; ++ir )
for( iv = 0; iv <= N_v; ++iv )
for( iu = 0; iu <= N_u; ++iu )
{
u = -z + ( (2*z)/(double )N_u )*iu;
v = -z + ( (2*z)/(double )N_v )*iv;
r = r_min + ir*dr;
t = sqrt(u*u + v*v + gamma*gamma);
k = iu + (N_u+1)*iv + (N_u+1)*(N_v+1)*ir;
pts[k][0] = u *r/t;
pts[k][1] = v *r/t;
pts[k][2] = gamma*r/t;
}
for( ir = 0; ir < N_r; ++ir )
for( iv = 0; iv < N_v; ++iv )
for( iu = 0; iu < N_u; ++iu )
{
k = 8*(iu + N_u*iv + N_u*N_v*ir);
#undef INDEX
#define INDEX(iu,iv,ir) ( (iu) + (N_u+1)*(iv) + (N_u+1)*(N_v+1)*(ir) )
cja[k+0] = INDEX(iu ,iv ,ir );
cja[k+1] = INDEX(iu+1,iv ,ir );
cja[k+2] = INDEX(iu+1,iv+1,ir );
cja[k+3] = INDEX(iu ,iv+1,ir );
cja[k+4] = INDEX(iu ,iv ,ir+1);
cja[k+5] = INDEX(iu+1,iv ,ir+1);
cja[k+6] = INDEX(iu+1,iv+1,ir+1);
cja[k+7] = INDEX(iu ,iv+1,ir+1);
}
for( i = 0; i <= ncells; ++i )
cia[i] = 8*i;
for( i = 0; i < ncells; ++i )
types[i] = PVO_VTU_HEXAHEDRON;
srand( 0 );
for( i = 0; i < nnodes; ++i ) {
U[3*i+0] = (1.0*rand())/(1.0*RAND_MAX);
U[3*i+1] = (1.0*rand())/(1.0*RAND_MAX);
U[3*i+2] = (1.0*rand())/(1.0*RAND_MAX);
}
for( i = 0; i < ncells; ++i )
V[i] = (1.0*rand())/(1.0*RAND_MAX);
}
开发者ID:kraused,项目名称:pvo,代码行数:67,代码来源:chunk.c
示例2: ulog_get_entries
/* Get the last set of updates seen, (last+1) to n is returned. */
krb5_error_code
ulog_get_entries(krb5_context context, const kdb_last_t *last,
kdb_incr_result_t *ulog_handle)
{
XDR xdrs;
kdb_ent_header_t *indx_log;
kdb_incr_update_t *upd;
unsigned int indx, count;
uint32_t sno;
krb5_error_code retval;
kdb_log_context *log_ctx;
kdb_hlog_t *ulog = NULL;
uint32_t ulogentries;
INIT_ULOG(context);
ulogentries = log_ctx->ulogentries;
retval = lock_ulog(context, KRB5_LOCKMODE_SHARED);
if (retval)
return retval;
/* If another process terminated mid-update, reset the ulog and force full
* resyncs. */
if (ulog->kdb_state != KDB_STABLE)
reset_header(ulog);
ulog_handle->ret = get_sno_status(log_ctx, last);
if (ulog_handle->ret != UPDATE_OK)
goto cleanup;
sno = last->last_sno;
count = ulog->kdb_last_sno - sno;
upd = calloc(count, sizeof(kdb_incr_update_t));
if (upd == NULL) {
ulog_handle->ret = UPDATE_ERROR;
retval = ENOMEM;
goto cleanup;
}
ulog_handle->updates.kdb_ulog_t_val = upd;
for (; sno < ulog->kdb_last_sno; sno++) {
indx = sno % ulogentries;
indx_log = INDEX(ulog, indx);
memset(upd, 0, sizeof(kdb_incr_update_t));
xdrmem_create(&xdrs, (char *)indx_log->entry_data,
indx_log->kdb_entry_size, XDR_DECODE);
if (!xdr_kdb_incr_update_t(&xdrs, upd)) {
ulog_handle->ret = UPDATE_ERROR;
retval = KRB5_LOG_CONV;
goto cleanup;
}
/* Mark commitment since we didn't want to decode and encode the incr
* update record the first time. */
upd->kdb_commit = indx_log->kdb_commit;
upd++;
}
ulog_handle->updates.kdb_ulog_t_len = count;
ulog_handle->lastentry.last_sno = ulog->kdb_last_sno;
ulog_handle->lastentry.last_time.seconds = ulog->kdb_last_time.seconds;
ulog_handle->lastentry.last_time.useconds = ulog->kdb_last_time.useconds;
ulog_handle->ret = UPDATE_OK;
cleanup:
unlock_ulog(context);
return retval;
}
开发者ID:DirectXMan12,项目名称:krb5,代码行数:71,代码来源:kdb_log.c
示例3: mexFunction
//.........这里部分代码省略.........
vector_c = mxGetPr(prhs[1]);
if((MAX(mxGetM(prhs[1]),mxGetN(prhs[1])) != dim) ||
(MIN(mxGetM(prhs[1]),mxGetN(prhs[1])) != 1))
mexErrMsgTxt("Vector is of wrong size.");
/* vector y */
vector_y = mxGetPr(prhs[2]);
if((MAX(mxGetM(prhs[2]),mxGetN(prhs[2])) != dim) ||
(MIN(mxGetM(prhs[2]),mxGetN(prhs[2])) != 1))
mexErrMsgTxt("Vector is of wrong size.");
/* string identifier of QP solver to be used */
if( mxIsChar( prhs[3] ) != 1) mexErrMsgTxt("Solver must be a string.");
buf_len = (mxGetM(prhs[3]) * mxGetN(prhs[3])) + 1;
buf_len = (buf_len > 20) ? 20 : buf_len;
mxGetString( prhs[3], solver, buf_len );
/* maximal allowed number of iterations */
tmax = mxIsInf( mxGetScalar(prhs[4])) ? INT_MAX : (long)mxGetScalar(prhs[4]);
tolabs = mxGetScalar(prhs[5]); /* abs. precision defining stopping cond*/
tolrel = mxGetScalar(prhs[6]); /* rel. precision defining stopping cond*/
/* threshold on lower bound */
thlb = mxIsInf( mxGetScalar(prhs[7])) ? DBL_MAX : (double)mxGetScalar(prhs[7]);
verb = (int)mxGetScalar(prhs[8]); /* verbosity on/off */
if( verb == 1 ) {
mexPrintf("Settings of QP solver\n");
mexPrintf("solver : %s\n", solver );
mexPrintf("tmax : %d\n", tmax );
mexPrintf("tolabs : %f\n", tolabs );
mexPrintf("tolrel : %f\n", tolrel );
mexPrintf("dim : %d\n", dim );
}
/*------------------------------------------------------------------- */
/* Inicialization */
/*------------------------------------------------------------------- */
/* output "solution" vector alpha [dim x 1] */
plhs[0] = mxCreateDoubleMatrix(dim,1,mxREAL);
alpha = mxGetPr(plhs[0]);
/* allocattes and precomputes diagonal of virtual K matrix */
diag_H = mxCalloc(dim, sizeof(double));
if( diag_H == NULL ) mexErrMsgTxt("Not enough memory.");
for(i = 0; i < dim; i++ ) {
diag_H[i] = matrix_H[dim*i+i];
}
/* counter of access to matrix H */
access = dim;
/*------------------------------------------------------------------- */
/* Call QP solver */
/*------------------------------------------------------------------- */
if ( strcmp( solver, "mdm" ) == 0 ) {
exitflag = gnpp_mdm( &get_col, diag_H, vector_c, vector_y, dim, tmax,
tolabs, tolrel, thlb, alpha, &t, &aHa11, &aHa22, &History, verb );
} else if ( strcmp( solver, "imdm" ) == 0 ) {
exitflag = gnpp_imdm( &get_col, diag_H, vector_c, vector_y, dim, tmax,
tolabs, tolrel, thlb, alpha, &t, &aHa11, &aHa22, &History, verb );
} else {
mexErrMsgTxt("Unknown QP solver identifier!");
}
/*------------------------------------------------------------------- */
/* Generate outputs */
/*------------------------------------------------------------------- */
/* exitflag [1x1] */
plhs[1] = mxCreateDoubleMatrix(1,1,mxREAL);
*(mxGetPr(plhs[1])) = (double)exitflag;
/* t [1x1] */
plhs[2] = mxCreateDoubleMatrix(1,1,mxREAL);
*(mxGetPr(plhs[2])) = (double)t;
/* access [1x1] */
plhs[3] = mxCreateDoubleMatrix(1,1,mxREAL);
*(mxGetPr(plhs[3])) = (double)access;
/* History [2 x (t+1)] */
plhs[4] = mxCreateDoubleMatrix(2,t+1,mxREAL);
tmp_ptr = mxGetPr( plhs[4] );
for( i = 0; i <= t; i++ ) {
tmp_ptr[INDEX(0,i,2)] = History[INDEX(0,i,2)];
tmp_ptr[INDEX(1,i,2)] = History[INDEX(1,i,2)];
}
/*------------------------------------------------------------------- */
/* Free used memory */
/*------------------------------------------------------------------- */
mxFree( History );
mxFree( diag_H );
}
开发者ID:alviur,项目名称:Action_recognition,代码行数:101,代码来源:gnpp_mex.c
示例4: mexFunction
//.........这里部分代码省略.........
} else {
W = (double*)mxGetPr(prhs[1]);
}
// ------------------------------------------------------------------------
// mapTable
tmp_ptr = (double*)mxGetPr(prhs[2]);
dims = mxGetDimensions(prhs[2]);
if (dims[0]*dims[1] != M*4)
{
mexErrMsgTxt("mapTable must be a matrix [M x 4 (double)]");
}
for (int i = 0; i < M*4; ++i)
{
mapTable[i] = (int)tmp_ptr[i];
}
// prepare output matrix
plhs[0] = mxCreateNumericMatrix(2, M, mxDOUBLE_CLASS, mxREAL);
result = (double*)mxGetPr(plhs[0]);
//--------------------------------------------------------------------------
// get Q, G
double ** q = (double**)calloc(M, sizeof(double*));
double ** g = (double**)calloc((M-1), sizeof(double*));
int idx_qtemp = 0;
double * L;
for (int idx = 0; idx < M; ++idx)
{
// Q
tsize = mapTable[INDEX(idx, 1, M)] - mapTable[INDEX(idx, 0, M)] + 1;
double * q_temp = (double*)calloc(tsize, sizeof(double));
memcpy(q_temp, W+mapTable[INDEX(idx, 0, M)]-1, tsize*sizeof(double));
// sparse dot product <W_q, PSI_q>
cell_ptr = mxGetCell(prhs[3], idx);
dims = mxGetDimensions(cell_ptr);
cols = dims[1];
rows = dims[0];
uint32_t *psi_temp = (uint32_t*)mxGetPr(cell_ptr);
if (lossy)
{
L = (double*)mxGetPr(mxGetCell(prhs[4], idx));
}
q[idx] = (double*)malloc(cols*sizeof(double));
for (int i = 0; i < cols; ++i)
{
double dotprod = 0.0f;
for (int j = 0; j < rows; ++j)
{
idx_qtemp = psi_temp[(rows*i) + j];
dotprod += q_temp[ idx_qtemp ];
}
q[idx][i] = dotprod;
if (lossy)
{
q[idx][i] += L[i];
}
}
free(q_temp);
// G
开发者ID:JVision,项目名称:flandmark,代码行数:67,代码来源:argmax_mex.cpp
示例5: qpbsvm_mex
//.........这里部分代码省略.........
/* string identifier of QP solver to be used */
if( mxIsChar( prhs[3] ) != 1) mexErrMsgTxt("Solver must be a string.");
buf_len = (mxGetM(prhs[3]) * mxGetN(prhs[3])) + 1;
buf_len = (buf_len > 20) ? 20 : buf_len;
mxGetString( prhs[3], solver, buf_len );
tmax = mxIsInf( mxGetScalar(prhs[4])) ? INT_MAX : (long)mxGetScalar(prhs[4]);
tolabs = mxGetScalar(prhs[5]); /* abs. precision defining stopping cond*/
tolrel = mxGetScalar(prhs[6]); /* rel. precision defining stopping cond*/
tolKKT = mxGetScalar(prhs[7]); /* rel. precision defining stopping cond*/
verb = (int)(mxGetScalar(prhs[8])); /* verbosity on/off */
/* output "solution" vector alpha [dim x 1] */
plhs[0] = mxCreateDoubleMatrix(dim,1,mxREAL);
x = mxGetPr(plhs[0]);
x0 = mxGetPr(prhs[9]);
for(i=0; i < dim; i++) x[i] = x0[i];
/* Nabla = H*x + f */
plhs[5] = mxCreateDoubleMatrix(dim,1,mxREAL);
Nabla = mxGetPr(plhs[5]);
tmp_ptr = mxGetPr(prhs[10]);
for(i=0; i < dim; i++) Nabla[i] = tmp_ptr[i];
if( verb > 0 ) {
mexPrintf("Settings of QP solver\n");
mexPrintf("nrhs : %d\n", nrhs);
mexPrintf("solver : %s\n", solver);
mexPrintf("UB : %f\n", UB );
mexPrintf("tmax : %d\n", tmax );
mexPrintf("tolabs : %f\n", tolabs );
mexPrintf("tolrel : %f\n", tolrel );
mexPrintf("dim : %d\n", dim );
mexPrintf("verb : %d\n", verb );
}
/*------------------------------------------------------------------- */
/* Inicialization */
/*------------------------------------------------------------------- */
/* allocattes and precomputes diagonal of virtual K matrix */
diag_H = mxCalloc(dim, sizeof(double));
if( diag_H == NULL ) mexErrMsgTxt("Not enough memory.");
for(i = 0; i < dim; i++ ) {
diag_H[i] = matrix_H[dim*i+i];
}
/* counter of access to matrix H */
access = dim;
/*------------------------------------------------------------------- */
/* Call QP solver */
/*------------------------------------------------------------------- */
if ( strcmp( solver, "sca" ) == 0 ) {
exitflag = qpbsvm_sca( &get_col, diag_H, f, UB, dim, tmax,
tolabs, tolrel, tolKKT, x, Nabla, &t, &History, verb );
} else if (strcmp( solver, "scas" ) == 0 ) {
exitflag = qpbsvm_scas( &get_col, diag_H, f, UB, dim, tmax,
tolabs, tolrel, tolKKT, x, Nabla, &t, &History, verb );
} else if (strcmp( solver, "scamv" ) == 0 ) {
exitflag = qpbsvm_scamv( &get_col, diag_H, f, UB, dim, tmax,
tolabs, tolrel, tolKKT, x, Nabla, &t, &History, verb );
} else {
mexErrMsgTxt("Unknown QP solver identifier!");
}
/*------------------------------------------------------------------- */
/* Generate outputs */
/*------------------------------------------------------------------- */
/* exitflag [1x1] */
plhs[1] = mxCreateDoubleMatrix(1,1,mxREAL);
*(mxGetPr(plhs[1])) = (double)exitflag;
/* t [1x1] */
plhs[2] = mxCreateDoubleMatrix(1,1,mxREAL);
*(mxGetPr(plhs[2])) = (double)t;
/* access [1x1] */
plhs[3] = mxCreateDoubleMatrix(1,1,mxREAL);
*(mxGetPr(plhs[3])) = (double)access;
/* History [2 x (t+1)] */
plhs[4] = mxCreateDoubleMatrix(2,t+1,mxREAL);
tmp_ptr = mxGetPr( plhs[4] );
for( i = 0; i <= t; i++ ) {
tmp_ptr[INDEX(0,i,2)] = History[INDEX(0,i,2)];
tmp_ptr[INDEX(1,i,2)] = History[INDEX(1,i,2)];
}
/*------------------------------------------------------------------- */
/* Free used memory */
/*------------------------------------------------------------------- */
mxFree( History );
mxFree( diag_H );
}
开发者ID:lambday,项目名称:svc,代码行数:101,代码来源:qpbsvm_mex.c
示例6: ALOGI
status_t ExynosCameraFrameFactory::initPipes(void)
{
ALOGI("INFO(%s[%d])", __FUNCTION__, __LINE__);
int ret = 0;
camera_pipe_info_t pipeInfo[3];
ExynosRect tempRect;
int maxSensorW = 0, maxSensorH = 0, hwSensorW = 0, hwSensorH = 0;
int maxPreviewW = 0, maxPreviewH = 0, hwPreviewW = 0, hwPreviewH = 0;
int hwPictureW = 0, hwPictureH = 0;
int bayerFormat = CAMERA_BAYER_FORMAT;
int previewFormat = m_parameters->getHwPreviewFormat();
int pictureFormat = m_parameters->getPictureFormat();
struct ExynosConfigInfo *config = m_parameters->getConfig();
m_parameters->getMaxSensorSize(&maxSensorW, &maxSensorH);
m_parameters->getHwSensorSize(&hwSensorW, &hwSensorH);
m_parameters->getMaxPreviewSize(&maxPreviewW, &maxPreviewH);
m_parameters->getHwPreviewSize(&hwPreviewW, &hwPreviewH);
m_parameters->getHwPictureSize(&hwPictureW, &hwPictureH);
ALOGI("INFO(%s[%d]): MaxSensorSize(%dx%d), HWSensorSize(%dx%d)", __FUNCTION__, __LINE__, maxSensorW, maxSensorH, hwSensorW, hwSensorH);
ALOGI("INFO(%s[%d]): MaxPreviewSize(%dx%d), HwPreviewSize(%dx%d)", __FUNCTION__, __LINE__, maxPreviewW, maxPreviewH, hwPreviewW, hwPreviewH);
ALOGI("INFO(%s[%d]): HWPictureSize(%dx%d)", __FUNCTION__, __LINE__, hwPictureW, hwPictureH);
memset(pipeInfo, 0, (sizeof(camera_pipe_info_t) * 3));
/* FLITE pipe */
#ifdef FIXED_SENSOR_SIZE
tempRect.fullW = maxSensorW + 16;
tempRect.fullH = maxSensorH + 10;
#else
tempRect.fullW = hwSensorW + 16;
tempRect.fullH = hwSensorH + 10;
#endif
tempRect.colorFormat = bayerFormat;
pipeInfo[0].rectInfo = tempRect;
pipeInfo[0].bufInfo.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
pipeInfo[0].bufInfo.memory = V4L2_CAMERA_MEMORY_TYPE;
pipeInfo[0].bufInfo.count = config->current->bufInfo.num_bayer_buffers;
/* per frame info */
pipeInfo[0].perFrameNodeGroupInfo.perframeSupportNodeNum = 0;
pipeInfo[0].perFrameNodeGroupInfo.perFrameLeaderInfo.perFrameNodeType = PERFRAME_NODE_TYPE_NONE;
#ifdef CAMERA_PACKED_BAYER_ENABLE
/* packed bayer bytesPerPlane */
pipeInfo[0].bytesPerPlane[0] = ROUND_UP(pipeInfo[0].rectInfo.fullW, 10) * 8 / 5;
#endif
ret = m_pipes[INDEX(PIPE_FLITE)]->setupPipe(pipeInfo);
if (ret < 0) {
ALOGE("ERR(%s[%d]):FLITE setupPipe fail, ret(%d)", __FUNCTION__, __LINE__, ret);
/* TODO: exception handling */
return INVALID_OPERATION;
}
/* setParam for Frame rate */
uint32_t min, max, frameRate;
struct v4l2_streamparm streamParam;
memset(&streamParam, 0x0, sizeof(v4l2_streamparm));
m_parameters->getPreviewFpsRange(&min, &max);
if (m_parameters->getScalableSensorMode() == true)
frameRate = 24;
else
frameRate = max;
streamParam.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
streamParam.parm.capture.timeperframe.numerator = 1;
streamParam.parm.capture.timeperframe.denominator = frameRate;
ALOGI("INFO(%s[%d]:set framerate (denominator=%d)", __FUNCTION__, __LINE__, frameRate);
ret = setParam(streamParam, PIPE_FLITE);
if (ret < 0) {
ALOGE("ERR(%s[%d]):FLITE setParam fail, ret(%d)", __FUNCTION__, __LINE__, ret);
return INVALID_OPERATION;
}
#if 0
/* setParam for Frame rate */
int bnsScaleRatio = m_parameters->getBnsScaleRatio();
int bnsSize = 0;
ret = m_pipes[PIPE_FLITE]->setControl(V4L2_CID_IS_S_BNS, bnsScaleRatio);
if (ret < 0) {
ALOGE("ERR(%s[%d]): set BNS(%d) fail, ret(%d)", __FUNCTION__, __LINE__, bnsScaleRatio, ret);
} else {
ret = m_pipes[PIPE_FLITE]->getControl(V4L2_CID_IS_G_BNS_SIZE, &bnsSize);
if (ret < 0) {
ALOGE("ERR(%s[%d]): get BNS size fail, ret(%d)", __FUNCTION__, __LINE__, ret);
bnsSize = -1;
}
}
int bnsWidth = 0;
int bnsHeight = 0;
if (bnsSize > 0) {
bnsHeight = bnsSize & 0xffff;
bnsWidth = bnsSize >> 16;
//.........这里部分代码省略.........
开发者ID:TeamEOS,项目名称:hardware_samsung_slsi_exynos,代码行数:101,代码来源:ExynosCameraFrameFactory.cpp
示例7: updateGraph
void updateGraph()
{
if(dist) {
free(dist);
dist = NULL;
}
if(prev) {
free(prev);
prev = NULL;
}
if(graph) {
free(graph);
graph = NULL;
}
int r= 0, s=0;
dist = (int *) malloc(nl_nsites(nl) * sizeof(int));
prev = (int *) malloc(nl_nsites(nl) * sizeof(int));
graph = (int *) malloc(sizeof(int) * (nl_nsites(nl)) * (nl_nsites(nl)));
for(r=0;r<nl_nsites(nl);r++)
{
dist[r] = INFINITY;
prev[r] = UNDEFINED;
for(s=0;s<nl_nsites(nl);s++)
{
graph[INDEX(r, s, nl_nsites(nl))] = 0;
}
}
struct gossip *g = gossip;
while(g != NULL)
{
int len = strlen(gossip_latest(g));
char *lat = (char *) malloc(sizeof(char) * (len+1));
strcpy(lat, gossip_latest(g));
char *addr = lat;
char *ctr = index(addr, '/');
*ctr++ = 0;
char *payload = index(ctr, '/');
*payload++ = 0;
char *token = strtok(payload, ";");
while (token)
{
//printf("Address = %s\n", addr);
//printf("Token = %s\n", token);
set_dist(nl, graph, nl_nsites(nl), addr, token, 1);
token = strtok(NULL, ";");
}
g = gossip_next(g);
free(lat);
}
char *my_addr_str = addr_to_string(my_addr);
int my_index = nl_index(nl, my_addr_str);
// update connections of immediate neighbours
struct file_info *f = file_info;
while (f) {
char *addr = addr_to_string(f->addr);
if(strcmp(addr,my_addr_str ) != 0 && (f->type == FI_INCOMING || (f->type == FI_OUTGOING && f->status == FI_KNOWN && f->u.fi_outgoing.status == FI_CONNECTED)))
{
set_dist(nl, graph, nl_nsites(nl), addr, my_addr_str, 1);
}
f = f->next;
free(addr);
}
free(my_addr_str);
// call graph on updated graph
dijkstra(graph, nl_nsites(nl), my_index, dist, prev);
printf("PRINTING GRAPH\n");
for(r=0;r<nl_nsites(nl);r++)
{
for(s=0;s<nl_nsites(nl);s++)
{
printf("%d ", graph[INDEX(r, s, nl_nsites(nl))]);
}
printf("\n");
}
printf("\nPRINTING DISTANCE\n");
for(r=0;r<nl_nsites(nl);r++)
{
printf("Distance to Site [%d] %s = %d\n", r, nl_name(nl,r), dist[r]);
}
printf("\nPRINTING PREV\n");
for(r=0;r<nl_nsites(nl);r++)
{
printf("Previous to Site [%d] %s = %d\n", r, nl_name(nl,r), prev[r]);
}
}
开发者ID:Amanjot1507,项目名称:OS-Work,代码行数:99,代码来源:connect.c
示例8: hqr
/*
Algorithm taken from Matrix Algorithms Vol. II by G.W. Stewart.
Given an upper Hessenberg matrix, H, hqr overwrites it iwth a unitary similar
triangular matrix whose diagonals are the eigenvalues of H.
I beleive this is called Schur form.
n is the size of the matrix H
-1 is returned if more than maxiter iterations are required to to deflate
the matrix at any eigenvalue. If everything completes successfully, a 0 is
returned.
c, s, r1, r2, and t are arrays of length n, used for scratch work
*/
int hqr(Complex *H, Complex *Q, Real *c, Complex *s, Complex *r1, Complex *r2, Complex *t, int n, int maxiter, Real epsilon)
{
int i1, i2, iter, oldi2, i, j;
Complex k, tmp;
//2. i1 = 1; i2 = n
i1 = 0;
i2 = n-1;//this is used both as an index and an upper bound in loops, so
//it must be n-1, but I must use <= in loops.
//3. iter = 0;
iter = 0;
//4. while(true)
while(1)
{
//5. iter = iter+1
iter += 1;
//6. if(iter > maxiter) error return fi
if(iter > maxiter)
return -1;
//7. oldi2 = i2
oldi2 = i2;
//8. backsearch(H, i2, i1, i2)
backsearch(H, n, i2, &i1, &i2, epsilon);
//9. if(i2 = 1) leave hqr fi
if(i2 == 0)
return 0;
//10. if(i2 != oldi2)iter = 0 fi
if(i2 != oldi2)
iter = 0;//I suppose we moved to the next eigenvalue
//11. wilkshift(H[i2-1,i2-1], H[i2-1,i2], H[i2,i2-1], H[i2,i2], k)
wilkshift(&INDEX(H,n,(i2-1),(i2-1)), &INDEX(H,n,(i2-1),i2), &INDEX(H,n,i2,(i2-1)), &INDEX(H,n,i2,i2), &k);
//12. H[i1,i1] = H[i1,i1] - k
INDEX(H,n,i1,i1).real -= k.real;
INDEX(H,n,i1,i1).imag -= k.imag;
//13. for i = i1 to i2-1
for(i = i1; i <= i2-1; i++)
{
//14. rotgen(H[i,i], H[i+1, i], c_i, s_i)
rotgen(&INDEX(H,n,i,i), &INDEX(H,n,(i+1),i), &c[i], &s[i]);
//15. H[i+1, i+1] = H[i+1, i+1] - k
INDEX(H,n,(i+1),(i+1)).real -= k.real;
INDEX(H,n,(i+1),(i+1)).imag -= k.imag;
//16. rotapp(c_i, s_i, H[i, i+1:n], H[i+1,i+1:n])
//Unfortunately, we are now using a row. Before we were looking at
//single columns, so I indexed the arrays H[i,j] = H[i + j*n], so
//that &INDEX(H,n,i,j) could be used to equal H[i:n,j]. I can't do
//that with rows now.
//I will be using the array r1 and r2 for these two rows
//copy the contents fo the rows to r1,r2
for(j = i+1; j < n; j++)
{
r1[j].real = INDEX(H,n,i,j).real;
r1[j].imag = INDEX(H,n,i,j).imag;
r2[j].real = INDEX(H,n,(i+1),j).real;
r2[j].imag = INDEX(H,n,(i+1),j).imag;
}
rotapp(&c[i], &s[i], &r1[i+1], &r2[i+1], t, n-i-1);
//now copy the results back to H
for(j = i+1; j < n; j++)
{
INDEX(H,n,i,j).real = r1[j].real;
INDEX(H,n,i,j).imag = r1[j].imag;
INDEX(H,n,(i+1),j).real = r2[j].real;
INDEX(H,n,(i+1),j).imag = r2[j].imag;
}
}//17. end for i
//18. for i = i1 to i2-1
for(i = i1; i <= i2-1; i++)
{
//.........这里部分代码省略.........
开发者ID:tsarvey,项目名称:spinwaves,代码行数:101,代码来源:c_version.c
示例9: righteigvec
/*
Algorithm taken from Matrix Algorithms Vol. II by G.W. Stewart.
REturns the right eigenvectors of the upper tiangular matrix T in the matrix X.
T and X and n*n Complex matrices.
*/
void righteigvec(Complex *T, Complex *X, int n)
{
int k, i, j;
Real dmin, tmp, s;
Complex d, tmp_c;
//fill X with zeros just in case
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
INDEX(X,n,i,j).real = 0.0;
INDEX(X,n,i,j).imag = 0.0;
}
}
//4. for k = n to 1 by -1
for(k = n-1; k >= 0; k--)
{
//5. X[1:k-1,k] = -T[1:k-1,k]
for(i = 0; i <= k-1; i++)
{
INDEX(X,n,i,k).real = -INDEX(T,n,i,k).real;
INDEX(X,n,i,k).imag = -INDEX(T,n,i,k).imag;
}
//6. X[k,k] = 1
INDEX(X,n,k,k).real = 1.0;
INDEX(X,n,k,k).imag = 0.0;
//7. X[k+1:n,k] = 0
for(i = k+1; i < n; i++)
{
INDEX(X,n,i,k).real = 0.0;
INDEX(X,n,i,k).imag = 0.0;
}
//8. dmin = max{eps_M*|T[k,k]|,smallnum}
dmin = 0.0;
tmp = INDEX(T,n,k,k).real * INDEX(T,n,k,k).real + INDEX(T,n,k,k).imag * INDEX(T,n,k,k).imag;
tmp = EPS_M * sqrt(tmp);
if(tmp > SMALLNUM)
dmin = tmp;
else
dmin = SMALLNUM;
//9. for j = k-1 to 1 by -1
for(j = k-1; j >= 0; j--)
{
//10. d = T[j,j] - T[k,k]
d.real = INDEX(T,n,j,j).real - INDEX(T,n,k,k).real;
d.imag = INDEX(T,n,j,j).imag - INDEX(T,n,k,k).imag;
//11. if(|d| <= dmin) d = dmin fi
if(norm(&d,1) <= dmin)
{
d.real = dmin;
d.imag = 0.0;
}
//12. if(|X[j,k]|/bignum >= |d|)
if(norm(&(INDEX(X,n,j,k)),1)/BIGNUM >= norm(&d,1))
{
//13. s = |d|/|X[j,k]|
s = norm(&d, 1)/norm(&INDEX(X,n,j,k),1);
//14. X[1:k,k] = s*X[1:k,k]
for(i = 0; i <= k; i++)
{
INDEX(X,n,i,k).real = s*INDEX(X,n,i,k).real;
INDEX(X,n,i,k).imag = s*INDEX(X,n,i,k).imag;
}
}//15. endif
//16. X[j,k] = X[j,k]/d
tmp = INDEX(X,n,j,k).real;
INDEX(X,n,j,k).real = INDEX(X,n,j,k).real*d.real + INDEX(X,n,j,k).imag*d.imag;
INDEX(X,n,j,k).imag = INDEX(X,n,j,k).imag*d.real - tmp*d.imag;
tmp = d.real*d.real + d.imag*d.imag;
INDEX(X,n,j,k).real /= tmp;
INDEX(X,n,j,k).imag /= tmp;
//17. X[1:j-1,k] = X[1:j-1,k] - X[j,k]*T[1:j-1,j]
for(i = 0; i <= j-1; i++)
{
tmp_c = complexMult(INDEX(X,n,j,k), INDEX(T,n,i,j));
INDEX(X,n,i,k).real = INDEX(X,n,i,k).real - tmp_c.real;
INDEX(X,n,i,k).imag = INDEX(X,n,i,k).imag - tmp_c.imag;
}
}//18. end for j
//19. X[1:k,k] = X[1:k,k]/||X[1:k,k]||_2
//.........这里部分代码省略.........
开发者ID:tsarvey,项目名称:spinwaves,代码行数:101,代码来源:c_version.c
示例10: CTL
{NAME("prof_gdump"), CTL(opt_prof_gdump)},
{NAME("prof_final"), CTL(opt_prof_final)},
{NAME("prof_leak"), CTL(opt_prof_leak)},
{NAME("prof_accum"), CTL(opt_prof_accum)}
};
static const ctl_named_node_t arena_i_node[] = {
{NAME("purge"), CTL(arena_i_purge)},
{NAME("dss"), CTL(arena_i_dss)}
};
static const ctl_named_node_t super_arena_i_node[] = {
{NAME(""), CHILD(named, arena_i)}
};
static const ctl_indexed_node_t arena_node[] = {
{INDEX(arena_i)}
};
static const ctl_named_node_t arenas_bin_i_node[] = {
{NAME("size"), CTL(arenas_bin_i_size)},
{NAME("nregs"), CTL(arenas_bin_i_nregs)},
{NAME("run_size"), CTL(arenas_bin_i_run_size)}
};
static const ctl_named_node_t super_arenas_bin_i_node[] = {
{NAME(""), CHILD(named, arenas_bin_i)}
};
static const ctl_indexed_node_t arenas_bin_node[] = {
{INDEX(arenas_bin_i)}
};
开发者ID:GlassFace,项目名称:sunwell,代码行数:30,代码来源:ctl.c
示例11: hessreduce
/*
Algorithm taken from Matrix Algorithms Vol. II by G.W. Stewart.
This function takes a vector A of order n and reduces it to Hessenberg form
by Householder transformations.
In the future it may be possible to remove H entirely and do the transformation
in place.
A is an n*n matrix that I am transforming
H is an n*n matrix where I will put the result
Q is an n*n matrix where I will accumulate the transformations
u is a vector of length n for scratch work.
vH is another vector of length n for scratch work
*/
void hessreduce(Complex *A, Complex *H, Complex *Q, Complex *u, Complex *vH, int n)
{
int k, i, j, l;
Complex tmp;
if(n < 2)
return;
//Reduce A
//H = A
copyMat(A,H,n,n);
//3. for k = 1 to n-2
for(k = 0; k < n-2; k++)
{
//Generate the Transformation
//housegen(H[k+1:n,k],u,H[k+1,k])
housegen(&INDEX(H,n,(k+1),k),u+k+1,&INDEX(H,n,(k+1),k),n-k-1);
//5. Q[k+1:n,k] = u
copyVect(u+k+1, &INDEX(Q, n, (k+1), k), n-k-1);
//Premultiply the transformation
//6. vH = uH*H[k+1:n,k+1:n]
for(i = k+1; i < n; i++)
{
vH[i].real = 0.0;
vH[i].imag = 0.0;
for(j = k+1; j < n; j++)
{
tmp = INDEX(H,n,j,i);
vH[i].real += u[j].real * tmp.real;
vH[i].real += u[j].imag * tmp.imag;//minus minus for hermitian
vH[i].imag += u[j].real * tmp.imag;
vH[i].imag -= u[j].imag * tmp.real;//minus sign is for hermitian
}
}
//7. H[k+1:n,k+1:n] = H[k+1:n, k+1:n] - u*vH
for(i = k+1; i < n; i++)
{
for(j = k+1; j < n; j++)
{
INDEX(H,n,i,j).real -= u[i].real *vH[j].real;
INDEX(H,n,i,j).real += u[i].imag *vH[j].imag;
INDEX(H,n,i,j).imag -= u[i].real *vH[j].imag;
INDEX(H,n,i,j).imag -= u[i].imag *vH[j].real;
}
}
//H[k+2:n,k] = 0
for(i = k+2; i < n; i++)
{
INDEX(H,n,i,k).real = 0.0;
INDEX(H,n,i,k).imag = 0.0;
}
//Postmultiply the transformation
//9. v = H[1:n, k+1:n]*u
//I will use the variable vH for v (for space).
for(i = 0; i < n; i++)
{
vH[i].real = 0.0;
vH[i].imag = 0.0;
for(j = k+1; j < n; j++)
{
tmp = INDEX(H,n,i,j);
vH[i].real += tmp.real * u[j].real;
vH[i].real -= tmp.imag * u[j].imag;
vH[i].imag += tmp.real * u[j].imag;
vH[i].imag += tmp.imag * u[j].real;
}
}
//10. H[1:n, k+1:n] = H[1:n,k+1:n] - v*uH
for(i = 0; i < n; i++)
{
for(j = k+1; j < n; j++)
{
INDEX(H,n,i,j).real -= vH[i].real * u[j].real;
INDEX(H,n,i,j).real -= vH[i].imag * u[j].imag;
INDEX(H,n,i,j).imag += vH[i].real * u[j].imag;
INDEX(H,n,i,j).imag -= vH[i].imag * u[j].real;
}
//.........这里部分代码省略.........
开发者ID:tsarvey,项目名称:spinwaves,代码行数:101,代码来源:c_version.c
示例12: mxmg_c
//.........这里部分代码省略.........
Detailed Input to Detailed_Input
Detailed Output to Detailed_Output
-CSPICE Version 1.1.1, 10-NOV-2006 (EDW)
Added Parameters section header.
-CSPICE Version 1.1.0, 28-AUG-2001 (NJB)
Const-qualified input arrays.
-CSPICE Version 1.0.0, 16-APR-1999 (NJB)
-Index_Entries
matrix times matrix n-dimensional_case
-&
*/
{ /* Begin mxmg_c */
/*
Local macros
We'd like to be able to refer to the elements of the input and output
matrices using normal subscripts, for example, m1[2][3]. Since the
compiler doesn't know how to compute index offsets for the array
arguments, which have user-adjustable size, we must compute the
offsets ourselves. To make syntax a little easier to read (we hope),
we'll use macros to do the computations.
The macro INDEX(width, i,j) computes the index offset from the array
base of the element at position [i][j] in a 2-dimensional matrix
having the number of columns indicated by width. For example, if
the input matrix m1 has 2 rows and 3 columns, the element at position
[0][1] would be indicated by
m1[ INDEX(3,0,1) ]
*/
#define INDEX( width, row, col ) ( (row)*(width) + (col) )
/*
Local variables
*/
SpiceDouble innerProduct;
SpiceDouble *tmpmat;
SpiceDouble *loc_m1;
SpiceDouble *loc_m2;
SpiceInt col;
SpiceInt nelts;
SpiceInt row;
SpiceInt i;
size_t size;
/*
Allocate space for a temporary copy of the output matrix, which
has nrow1 rows and ncol2 columns.
*/
开发者ID:Boxx-Obspm,项目名称:DOCKing_System,代码行数:67,代码来源:mxmg_c.c
示例13: timeTest
double timeTest(int num)
{
//linux wall time
struct timeval tvBegin, tvEnd, tvDiff;
int i;
#define N 8
Complex A[N*N];
Real c[N];
Complex s[N], r1[N], r2[N], t[N];
INDEX(A,8,0,0).real = -1.2;
INDEX(A,8,0,0).imag = 3.1;
INDEX(A,8,0,1).real = 2.4;
INDEX(A,8,0,1).imag = -0.1;
INDEX(A,8,0,2).real = 0.3;
INDEX(A,8,0,2).imag = -1.0;
INDEX(A,8,0,3).real = 3.6;
INDEX(A,8,0,3).imag = -0.2;
INDEX(A,8,0,4).real = 1.0;
INDEX(A,8,0,4).imag = 0.0;
INDEX(A,8,0,5).real = 0.1;
INDEX(A,8,0,5).imag = -3.2;
INDEX(A,8,0,6).real = 2.3;
INDEX(A,8,0,6).imag = 1.6;
INDEX(A,8,0,7).real = 0.4;
INDEX(A,8,0,7).imag = -2.3;
INDEX(A,8,1,0).real = 1.1;
INDEX(A,8,1,0).imag = -0.2;
INDEX(A,8,1,1).real = -2.0;
INDEX(A,8,1,1).imag = 1.0;
INDEX(A,8,1,2).real = 3.2;
INDEX(A,8,1,2).imag = 3.8;
INDEX(A,8,1,3).real = -2.1;
INDEX(A,8,1,3).imag = -1.2;
INDEX(A,8,1,4).real = 1.6;
INDEX(A,8,1,4).imag = 0.9;
INDEX(A,8,1,5).real = -2.1;
INDEX(A,8,1,5).imag = -0.1;
INDEX(A,8,1,6).real = 1.3;
INDEX(A,8,1,6).imag = 2.1;
INDEX(A,8,1,7).real = 4.2;
INDEX(A,8,1,7).imag = 0.0;
INDEX(A,8,2,0).real = -1.2;
INDEX(A,8,2,0).imag = 3.1;
INDEX(A,8,2,1).real = 2.4;
INDEX(A,8,2,1).imag = -0.1;
INDEX(A,8,2,2).real = 0.3;
INDEX(A,8,2,2).imag = -1.0;
INDEX(A,8,2,3).real = 3.6;
INDEX(A,8,2,3).imag = -0.2;
INDEX(A,8,2,4).real = 1.0;
INDEX(A,8,2,4).imag = 0.0;
INDEX(A,8,2,5).real = 0.1;
INDEX(A,8,2,5).imag = -3.2;
INDEX(A,8,2,6).real = 0.0;
INDEX(A,8,2,6).imag = 0.0;
INDEX(A,8,2,7).real = 0.4;
INDEX(A,8,2,7).imag = -2.3;
INDEX(A,8,3,0).real = 1.1;
INDEX(A,8,3,0).imag = -0.2;
INDEX(A,8,3,1).real = -2.0;
INDEX(A,8,3,1).imag = 1.0;
INDEX(A,8,3,2).real = 3.2;
INDEX(A,8,3,2).imag = 3.8;
INDEX(A,8,3,3).real = -2.1;
INDEX(A,8,3,3).imag = -1.2;
INDEX(A,8,3,4).real = 1.6;
INDEX(A,8,3,4).imag = 0.9;
INDEX(A,8,3,5).real = -2.1;
INDEX(A,8,3,5).imag = -0.1;
INDEX(A,8,3,6).real = 1.3;
INDEX(A,8,3,6).imag = 2.1;
INDEX(A,8,3,7).real = 4.2;
INDEX(A,8,3,7).imag = 0.0;
INDEX(A,8,4,0).real = 1.2;
INDEX(A,8,4,0).imag = 3.1;
INDEX(A,8,4,1).real = 0.4;
INDEX(A,8,4,1).imag = -0.1;
INDEX(A,8,4,2).real = 0.3;
INDEX(A,8,4,2).imag = -1.0;
INDEX(A,8,4,3).real = 3.6;
INDEX(A,8,4,3).imag = -0.2;
INDEX(A,8,4,4).real = 0.0;
INDEX(A,8,4,4).imag = 0.0;
INDEX(A,8,4,5).real = 3.1;
INDEX(A,8,4,5).imag = -3.2;
INDEX(A,8,4,6).real = 2.3;
INDEX(A,8,4,6).imag = 1.6;
INDEX(A,8,4,7).real = 0.4;
INDEX(A,8,4,7).imag = -2.3;
INDEX(A,8,5,0).real = 2.1;
INDEX(A,8,5,0).imag = -0.2;
INDEX(A,8,5,1).real = -2.0;
INDEX(A,8,5,1).imag = 1.0;
INDEX(A,8,5,2).real = 3.2;
INDEX(A,8,5,2).imag = -3.8;
INDEX(A,8,5,3).real = 2.1;
//.........这里部分代码省略.........
开发者ID:tsarvey,项目名称:spinwaves,代码行数:101,代码来源:c_version.c
示例14: ExynosCameraFrame
ExynosCameraFrame *ExynosCameraFrameFactory::createNewFrame(void)
{
int ret = 0;
ExynosCameraFrameEntity *newEntity[MAX_NUM_PIPES] = {};
ExynosCameraFrame *frame = new ExynosCameraFrame(m_parameters, m_frameCount);
int requestEntityCount = 0;
setRequestSCP(true);
ret = m_initFrameMetadata(frame);
if (ret < 0)
ALOGE("(%s[%d]): frame(%d) metadata initialize fail", __FUNCTION__, __LINE__, m_frameCount);
/* set FLITE pipe to linkageList */
newEntity[INDEX(PIPE_FLITE)] = new ExynosCameraFrameEntity(PIPE_FLITE, ENTITY_TYPE_OUTPUT_ONLY, ENTITY_BUFFER_FIXED);
frame->addSiblingEntity(NULL, newEntity[INDEX(PIPE_FLITE)]);
requestEntityCount++;
/* set ISP pipe to linkageList */
newEntity[INDEX(PIPE_ISP)] = new ExynosCameraFrameEntity(PIPE_ISP, ENTITY_TYPE_INPUT_ONLY, ENTITY_BUFFER_FIXED);
frame->addChildEntity(newEntity[INDEX(PIPE_FLITE)], newEntity[INDEX(PIPE_ISP)]);
/* set SCC pipe to linkageList */
newEntity[INDEX(PIPE_SCC)] = new ExynosCameraFrameEntity(PIPE_SCC, ENTITY_TYPE_OUTPUT_ONLY, ENTITY_BUFFER_DELIVERY);
frame->addSiblingEntity(NULL, newEntity[INDEX(PIPE_SCC)]);
requestEntityCount++;
/* set SCP pipe to linkageList */
newEntity[INDEX(PIPE_SCP)] = new ExynosCameraFrameEntity(PIPE_SCP, ENTITY_TYPE_OUTPUT_ONLY, ENTITY_BUFFER_FIXED);
frame->addSiblingEntity(NULL, newEntity[INDEX(PIPE_SCP)]);
requestEntityCount++;
/* set GSC pipe to linkageList */
newEntity[INDEX(PIPE_GSC)] = new ExynosCameraFrameEntity(PIPE_GSC, ENTITY_TYPE_INPUT_OUTPUT, ENTITY_BUFFER_FIXED);
frame->addSiblingEntity(NULL, newEntity[INDEX(PIPE_GSC)]);
/* set GSC-Picture pipe to linkageList */
newEntity[INDEX(PIPE_GSC_PICTURE)] = new ExynosCameraFrameEntity(PIPE_GSC_PICTURE, ENTITY_TYPE_INPUT_OUTPUT, ENTITY_BUFFER_FIXED);
frame->addSiblingEntity(NULL, newEntity[INDEX(PIPE_GSC_PICTURE)]);
/* set GSC-Video pipe to linkageList */
newEntity[INDEX(PIPE_GSC_VIDEO)] = new ExynosCameraFrameEntity(PIPE_GSC_VIDEO, ENTITY_TYPE_INPUT_OUTPUT, ENTITY_BUFFER_FIXED);
frame->addSiblingEntity(NULL, newEntity[INDEX(PIPE_GSC_VIDEO)]);
/* set JPEG pipe to linkageList */
newEntity[INDEX(PIPE_JPEG)] = new ExynosCameraFrameEntity(PIPE_JPEG, ENTITY_TYPE_INPUT_OUTPUT, ENTITY_BUFFER_FIXED);
frame->addSiblingEntity(NULL, newEntity[INDEX(PIPE_JPEG)]);
ret = m_initPipelines(frame);
if (ret < 0) {
ALOGE("ERR(%s):m_initPipelines fail, ret(%d)", __FUNCTION__, ret);
}
m_fillNodeGroupInfo(frame);
/* TODO: make it dynamic */
frame->setNumRequestPipe(requestEntityCount);
m_frameCount++;
return frame;
}
开发者ID:TeamEOS,项目名称:hardware_samsung_slsi_exynos,代码行数:61,代码来源:ExynosCameraFrameFactory.cpp
示例15: read_scroll
//.........这里部分代码省略.........
msg("you hear a faint cry of anguish in the distance");
else
{
obj = new_item();
new_monster(obj, randmonster(FALSE), &mp);
}
when S_ID_POTION:
case S_ID_SCROLL:
case S_ID_WEAPON:
case S_ID_ARMOR:
case S_ID_R_OR_S:
{
static char id_type[S_ID_R_OR_S + 1] =
{ 0, 0, 0, 0, 0, POTION, SCROLL, WEAPON, ARMOR, R_OR_S };
/*
* Identify, let him figure something out
*/
scr_info[obj->o_which].oi_know = TRUE;
msg("this scroll is an %s scroll", scr_info[obj->o_which].oi_name);
whatis(TRUE, id_type[obj->o_which]);
}
when S_MAP:
/*
* Scroll of magic mapping.
*/
scr_info[S_MAP].oi_know = TRUE;
msg("oh, now this scroll has a map on it");
/*
* take all the things we want to keep hidden out of the window
*/
for (y = 1; y < NUMLINES - 1; y++)
for (x = 0; x < NUMCOLS; x++)
{
pp = INDEX(y, x);
switch (ch = pp->p_ch)
{
case DOOR:
case STAIRS:
break;
case '-':
case '|':
if (!(pp->p_flags & F_REAL))
{
ch = pp->p_ch = DOOR;
pp->p_flags |= F_REAL;
}
break;
case ' ':
if (pp->p_flags & F_REAL)
goto def;
pp->p_flags |= F_REAL;
ch = pp->p_ch = PASSAGE;
/* FALLTHROUGH */
case PASSAGE:
pass:
if (!(pp->p_flags & F_REAL))
pp->p_ch = PASSAGE;
pp->p_flags |= (F_SEEN|F_REAL);
ch = PASSAGE;
break;
case FLOOR:
if (pp->p_flags & F_REAL)
开发者ID:ashaindlin,项目名称:rogue,代码行数:67,代码来源:scrolls.c
示例16: ASSERT
void LoopUnroller::unroll(otawa::CFG *cfg, BasicBlock *header, VirtualCFG *vcfg) {
VectorQueue<BasicBlock*> workList;
VectorQueue<BasicBlock*> loopList;
VectorQueue<BasicBlock*> virtualCallList;
genstruct::Vector<BasicBlock*> doneList;
typedef genstruct::Vector<Pair<VirtualBasicBlock*, Edge::kind_t> > BackEdgePairVector;
BackEdgePairVector backEdges;
bool dont_unroll = false;
BasicBlock *unrolled_from;
int start;
/* Avoid unrolling loops with LOOP_COUNT of 0, since it would create a LOOP_COUNT of -1 for the non-unrolled part of the loop*/
/*
if (header && (ipet::LOOP_COUNT(header) == 0)) {
dont_unroll = true;
}
*/
//if (header) dont_unroll = true;
start = dont_unroll ? 1 : 0;
for (int i = start; ((i < 2) && header) || (i < 1); i++) {
doneList.clear();
ASSERT(workList.isEmpty());
ASSERT(loopList.isEmpty());
ASSERT(doneList.isEmpty());
workList.put(header ? header : cfg->entry());
doneList.add(header ? header : cfg->entry());
genstruct::Vector<BasicBlock*> bbs;
while (!workList.isEmpty()) {
BasicBlock *current = workList.get();
if (LOOP_HEADER(current) && (current != header)) {
/* we enter another loop */
loopList.put(current);
/* add exit edges destinations to the worklist */
for (genstruct::Vector<Edge*>::Iterator exitedge(**EXIT_LIST(current)); exitedge; exitedge++) {
if (!doneList.contains(exitedge->target())) {
workList.put(exitedge->target());
doneList.add(exitedge->target());
}
}
} else {
VirtualBasicBlock *new_bb = 0;
if ((!current->isEntry()) && (!current->isExit())) {
/* Duplicate the current basic block */
new_bb = new VirtualBasicBlock(current);
new_bb->removeAllProp(&ENCLOSING_LOOP_HEADER);
new_bb->removeAllProp(&EXIT_LIST);
new_bb->removeAllProp(&REVERSE_DOM);
new_bb->removeAllProp(&LOOP_EXIT_EDGE);
new_bb->removeAllProp(&LOOP_HEADER);
new_bb->removeAllProp(&ENTRY);
/* Remember the call block so we can correct its destination when we have processed it */
if (VIRTUAL_RETURN_BLOCK(new_bb))
virtualCallList.put(new_bb);
if ((current == header) && (!dont_unroll)) {
if (i == 0) {
unrolled_from = new_bb;
} else {
UNROLLED_FROM(new_bb) = unrolled_from;
}
}
/*
if (ipet::LOOP_COUNT(new_bb) != -1) {
if (i == 0) {
new_bb->removeAllProp(&ipet::LOOP_COUNT);
}
else {
int o
|
请发表评论