コード例 #1
0
ファイル: ocutil.c プロジェクト: joa-quim/netcdf-c
const char*
ocdtmodestring(OCDT mode,int compact)
{
    static char result[1+(NMODES*(MAXMODENAME+1))]; /* hack to avoid malloc */
    int i;
    char* p = result;
    result[0] = '\0';
    if(mode == 0) {
	if(compact) *p++ = '-';
	else if(!occoncat(result,sizeof(result),1,"NONE"))
	    return NULL;
    } else for(i=0;;i++) {
	char* ms = modestrings[i];
	if(ms == NULL) break;
	if(!compact && i > 0)
	    if(!occoncat(result,sizeof(result),1,","))
		return NULL;
        if(fisset(mode,(1<<i))) {
	    if(compact) *p++ = ms[0];
	    else if(!occoncat(result,sizeof(result),1,ms))
		return NULL;
	}
    }
    /* pad compact list out to NMODES in length (+1 for null terminator) */
    if(compact) {
	while((p-result) < NMODES) *p++ = ' ';
	*p = '\0';
    }
    return result;
}
コード例 #2
0
ファイル: ocdata.c プロジェクト: akrherz/gempak
/* Move to the ith sequence record. */
OCerror
ocdata_ithrecord(OCstate* state, OCdata* data,
                 size_t index, /* record number */
		 OCdata** recordp
                 )
{
    int stat = OC_NOERR;
    OCdata* record;
    OCnode* pattern;

    OCASSERT(state != NULL);
    OCASSERT(data != NULL);

    pattern = data->pattern;

    /* Must be a Sequence */
    if(pattern->octype != OC_Sequence
       || !fisset(data->datamode,OCDT_SEQUENCE))
	return OCTHROW(OC_EBADTYPE);

    /* Validate index */
    if(index >= data->ninstances)
	return OCTHROW(OC_EINDEX);

    record = data->instances[index];

    if(recordp) *recordp = record;

    octrace("ithrecord", state, record);

    return OCTHROW(stat);
}
コード例 #3
0
ファイル: ocdata.c プロジェクト: akrherz/gempak
OCerror
ocdata_position(OCstate* state, OCdata* data, size_t* indices)
{
    OCnode* pattern;

    OCASSERT(state != NULL);
    OCASSERT(data != NULL);
    OCASSERT(indices != NULL);

    pattern = data->pattern;
    if(fisset(data->datamode,OCDT_RECORD))
	indices[0] = data->index;
    else if(fisset(data->datamode,OCDT_ELEMENT)) {
	/* Transform the linearized array index into a set of indices */
	ocarrayindices(data->index,
                       pattern->array.rank,
                       pattern->array.sizes,
                       indices);
    } else
	return OCTHROW(OC_EBADTYPE);
    return OCTHROW(OC_NOERR);
}
コード例 #4
0
ファイル: ocdata.c プロジェクト: akrherz/gempak
OCerror
ocdata_recordcount(OCstate* state, OCdata* data, size_t* countp)
{
    OCASSERT(state != NULL);
    OCASSERT(data != NULL);
    OCASSERT(countp != NULL);

    if(data->pattern->octype != OC_Sequence
       || !fisset(data->datamode,OCDT_SEQUENCE))
	return OCTHROW(OC_EBADTYPE);

    *countp = data->ninstances;		

    return OC_NOERR;
}