($Id: ProtectStack.h 1397 2013-08-16 18:25:59Z arr $)
Class CXXR::ProtectStack and associated C interface.
More...
Go to the source code of this file.
Namespaces |
namespace | CXXR |
| Namespace for the CXXR project.
|
Typedefs |
typedef unsigned int | PROTECT_INDEX |
Functions |
void | R_ProtectWithIndex (SEXP node, PROTECT_INDEX *iptr) |
| Push a node pointer onto the C pointer protection stack.
|
void | R_Reprotect (SEXP node, PROTECT_INDEX index) |
| Retarget a cell in the C pointer protection stack.
|
void | Rf_ppsRestoreSize (size_t new_size) |
| Restore C pointer protection stack to a previous size.
|
size_t | Rf_ppsSize () |
| Current size of C pointer protection stack.
|
SEXP | Rf_protect (SEXP node) |
| Push a node pointer onto the C pointer protection stack.
|
void | Rf_unprotect (int count) |
| Pop cells from the C pointer protection stack.
|
void | Rf_unprotect_ptr (SEXP node) |
| Remove entry from pointer protection stack.
|
Detailed Description
Class CXXR::ProtectStack and associated C interface.
CXXR::ProtectStack encapsulates the functionality of the CR pointer protection stack.
See the paragraph 'Caller Protects' in the description of class CXXR::GCStackRoot for recommended coding policy.
Function Documentation
void R_ProtectWithIndex |
( |
SEXP |
node, |
|
|
PROTECT_INDEX * |
iptr |
|
) |
| |
|
inline |
Push a node pointer onto the C pointer protection stack.
Push a node pointer onto the C pointer protection stack, and record the index of the resulting stack cell (for subsequent use with R_Reprotect).
- Parameters:
-
node | Pointer to the node to be protected from the garbage collector. |
iptr | Pointer to a location in which the stack cell index is to be stored. |
void R_Reprotect |
( |
SEXP |
node, |
|
|
PROTECT_INDEX |
index |
|
) |
| |
|
inline |
Retarget a cell in the C pointer protection stack.
Change the node that a particular cell in the C pointer protection stack protects. As a consistency check, it is required that the reprotect takes place within the same ProtectStack::Scope as the original protect.
- Parameters:
-
node | Pointer to the node now to be protected from the garbage collector by the designated stack cell. (Not necessarily a different node from the one currently protected.) |
index | Index (as returned by R_ProtectWithIndex() ) of the stack cell to be retargeted to node. Must be less than the current size of the C pointer protection stack. |
void Rf_ppsRestoreSize |
( |
size_t |
new_size | ) |
|
Restore C pointer protection stack to a previous size.
Restore the C pointer protection stack to a previous size by popping elements off the top.
- Parameters:
-
new_size | The size to which the stack is to be restored. Must not be greater than the current size. |
- Deprecated:
- This is an interface for C code to call CXXR::ProtectStack::restoreSize(), which may cease to be available in future. In C++, use of the ProtectStack::Scope class is preferable.
Current size of C pointer protection stack.
- Returns:
- the current size of the C pointer protection stack.
- Deprecated:
- This is an interface for C code to call CXXR::ProtectStack::size(), which may cease to be public in future.
Push a node pointer onto the C pointer protection stack.
- Parameters:
-
node | Pointer to the node to be protected from the garbage collector. |
- Returns:
- a copy of node .
void Rf_unprotect |
( |
int |
count | ) |
|
|
inline |
Pop cells from the C pointer protection stack.
As a consistency check, it is required that the unprotect takes place within the same ProtectStack::Scope as the corresponding protects.
- Parameters:
-
count | Number of cells to be popped. Must not be larger than the current size of the C pointer protection stack. |
void Rf_unprotect_ptr |
( |
SEXP |
node | ) |
|
|
inline |
Remove entry from pointer protection stack.
Removes from the C pointer protection stack the uppermost stack cell containing a pointer to a specified node, and drops all the stack cells above it by one place.
- Parameters:
-
node | Pointer to the node whose cell is to be removed from the C pointer protection stack. |
- Deprecated:
- Utterly.