Emplace a field into an existing STObject at its canonical placement
Concepts
Behaviour
- Parse an STObject S(source object) pointed to bysread_ptr
- Parse an STObject F(to inject/emplace) pointed to byfread_ptr
- Write a new STObject to write_ptrwhich placesFintoSat the canonical positionfield_id
Field ID encoding
The
sto_apis accept afield_idparameter encoded as follows:(type << 16U) + field
Thus type 1 field 2 would be0x10002U.
Definition
int64_t sto_emplace (
    uint32_t write_ptr,
  	uint32_t write_len,
    uint32_t sread_ptr,
    uint32_t sread_len,
    uint32_t fread_ptr,
    uint32_t fread_len,
  	uint32_t field_id
);
Example
uint8_t tx_out[1024];
int64_t tx_len =
    sto_emplace(tx_out, sizeof(tx_out),
                tx_in, tx_len,
                sequence_field, 5, sfSequence);
if (tx_len <= 0)
    rollback("Emplacing failed.", 17, 1);
Parameters
| Name | Type | Description | 
|---|---|---|
| write_ptr | uint32_t | The buffer to write the modified STObject to | 
| write_len | uint32_t | The length of the output buffer | 
| sread_ptr | uint32_t | The buffer to read the source STObject from | 
| sread_len | uint32_t | The Length of the source object | 
| fread_ptr | uint32_t | The buffer to read the field to be emplaced/injected from | 
| fread_len | uint32_t | The length of the field to be emplaced/injected | 
| field_id | uint32_t | The sfcode (location) to form the emplacement. If this already exists in the source object then the existing field is overriden. If it doesn't exist it is inserted. | 
Return Code
| Type | Description | 
|---|---|
| int64_t | The number of bytes written to write_ptrIf negative, an error: OUT_OF_BOUNDS- pointers/lengths specified outside of hook memory. TOO_SMALL- Output buffer must be at least as large as the source object + the injected field, even if the field is only being overriden. TOO_BIG- Field you are attempting to emplace is too large PARSE_ERROR- The supplied STObject is malformed or not an STObject. |