コード例 #1
0
ファイル: state.c プロジェクト: OSCCAR-PFM/OSCCAR-dev
void icetStateCopy(IceTState dest, const IceTState src)
{
    IceTEnum pname;
    IceTSizeType type_width;
    IceTTimeStamp mod_time;

    mod_time = icetGetTimeStamp();

    for (pname = ICET_STATE_ENGINE_START;
         pname < ICET_STATE_ENGINE_END;
         pname++) {
        if (   (pname == ICET_RANK)
            || (pname == ICET_NUM_PROCESSES)
            || (pname == ICET_DATA_REPLICATION_GROUP)
            || (pname == ICET_DATA_REPLICATION_GROUP_SIZE)
            || (pname == ICET_COMPOSITE_ORDER)
            || (pname == ICET_PROCESS_ORDERS) )
        {
            continue;
        }

        type_width = icetTypeWidth(src[pname].type);

        if (type_width > 0) {
            IceTVoid *data = stateAllocate(pname,
                                           src[pname].num_entries,
                                           src[pname].type,
                                           dest);
            memcpy(data, src[pname].data, src[pname].num_entries * type_width);
        } else {
            stateFree(pname, dest);
        }
        dest[pname].mod_time = mod_time;
    }
}
コード例 #2
0
ファイル: state.c プロジェクト: OSCCAR-PFM/OSCCAR-dev
void icetStateDestroy(IceTState state)
{
    IceTEnum pname;

    for (pname = ICET_STATE_ENGINE_START;
         pname < ICET_STATE_ENGINE_END;
         pname++) {
        stateFree(pname, state);
    }
    free(state);
}
コード例 #3
0
ファイル: states.c プロジェクト: ecalot/princed
void stateReset(tState* state, short stateId) {
	stateFree(state);
	*state=stateCreate(stateId);
}
コード例 #4
0
ファイル: state.c プロジェクト: OSCCAR-PFM/OSCCAR-dev
static IceTVoid *stateAllocate(IceTEnum pname,
                               IceTSizeType num_entries,
                               IceTEnum type,
                               IceTState state)
{
    IceTVoid *buffer;

    stateCheck(pname, state);

    if (   (num_entries == state[pname].num_entries)
        && (type == state[pname].type) ) {
        /* Return the current buffer. */
        state[pname].mod_time = icetGetTimeStamp();
        buffer = state[pname].data;
    } else if (num_entries > 0) {
        stateFree(pname, state);
        /* Create a new buffer. */
        buffer = malloc(STATE_DATA_ALLOCATE(type, num_entries));
        if (buffer == NULL) {
            icetRaiseError("Could not allocate memory for state variable.",
                           ICET_OUT_OF_MEMORY);
            return NULL;
        }
#ifdef ICET_STATE_CHECK_MEM
        /* Skip past padding. */
        buffer = (IceTByte *)buffer + STATE_PADDING_SIZE;
#endif

        state[pname].type = type;
        state[pname].num_entries = num_entries;
        state[pname].data = buffer;
        state[pname].mod_time = icetGetTimeStamp();

#ifdef ICET_STATE_CHECK_MEM
        /* Set padding data. */
        {
            IceTSizeType i;
            IceTByte *padding;
            padding = STATE_DATA_PRE_PADDING(pname, state);
            for (i = 0; i < STATE_PADDING_SIZE; i++) {
                padding[i] = g_pre_padding[i];
            }
            padding = STATE_DATA_POST_PADDING(pname, state);
            for (i = 0; i < STATE_PADDING_SIZE; i++) {
                padding[i] = g_post_padding[i];
            }
        }
#endif
    } else { /* num_entries <= 0 */
        buffer = NULL;

        state[pname].type = type;
        state[pname].num_entries = 0;
        state[pname].data = buffer;
        state[pname].mod_time = icetGetTimeStamp();
    }

#ifdef ICET_STATE_CHECK_MEM
    memset(buffer, 0xDC, STATE_DATA_WIDTH(type, num_entries));
#endif
    return buffer;
}