gtpc2mc3C/C++ Language Support User's Guide

TO2_atPut-Update the Specified Element

This function replaces the data of the specified entry with the new data that is supplied.

Note:
This function does not support all collections. See Table 47 for collections that are supported for this function.

Format

#include <c$to2.h>
long TO2_atPut  (const TO2_PID_PTR  pid_ptr,
                       TO2_ENV_PTR  env_ptr,
                 const long        *index
                 const void        *data,
                 const long        *dataLength,
                 const long        *updateSeqCtr);

pid_ptr
The pointer to the persistent identifier (PID) assigned to the collection.

env_ptr
The pointer to the environment as returned by the TO2_createEnv function.

index
The pointer to the entry number that will be updated with the specified data.

data
The pointer to the element that will be stored in the specified entry.

dataLength
The pointer to an area that contains the length of the element that will be stored.

updateSeqCtr
The pointer to an area where the update sequence counter from a TO2_at request has been stored. If this sequence counter value is not equal to the current update sequence counter value of the collection, the TO2_atPut request will not be processed and an error will be returned.

Normal Return

The normal return is a positive value.

Error Return

An error return is indicated by a zero. When zero is returned, use the TO2_getErrorCode function to determine the specific error code. For more information, see Error Handling.

The following error codes are common for this function:

TO2_ERROR_DATA_LGH

TO2_ERROR_ENV

TO2_ERROR_INDEX

TO2_ERROR_METHOD

TO2_ERROR_NOT_INIT

TO2_ERROR_PID

TO2_ERROR_SEQCTR

TO2_ERROR_UPDATE_NOT_ALLOWED

TO2_ERROR_ZERO_PID

Programming Considerations

A commit scope will be created for the TO2_atPut request. If the request is successful, the scope will be committed. If an error occurs while processing the TO2_atPut request, the scope will be rolled back.

Examples

The following example updates the third element of the specified collection with new data.

#include <c$to2.h>                     /* Needed for TO2 API functions   */
#include <stdio.h>                     /* APIs for std I/O functions     */
#include <stdlib.h>                    /* APIs for std library functions */
 
TO2_PID         *collect;              /* must set to point to existing
                                                 collection's PID        */
TO2_BUF_PTR     elem_ptr;              /* will hold element from TO2at   */
TO2_ENV_PTR     env_ptr;               /* Pointer to the TO2 environment */
long            position = 3;          /* position to update             */
const           newdata[] = "NewData"; /* data                           */
long            newdatsz;              /* data size                      */

  ·
  ·
  ·
/*************************************************************************/ /* First attempt to read entry at position to get sequence counter */ /*************************************************************************/ if ((elem_ptr = TO2_atPut(&collect, env_ptr, &position)) == NULL) { printf("TO2_atPut failed./n"); process_error(env_ptr); return; } /**********************************************************************/ /* Replace data at that position with new data. */ /**********************************************************************/ newdatsz = sizeof(newdata); if (TO2_atPut(&collect, env_ptr, &position, newdata, &newdatsz, &(elem_ptr->updateSeqNbr)) == TO2_ERROR) { printf("TO2_atPut failed!\n"); process_error(env_ptr); } else { printf("TO2_atPut is successful!\n"); }

Related Information