|
Tizen(Headed) Native API
6.5
|
These functions provide some helper for a pseudo Copy-On-Write mechanism.
Eina_Cow will return a const memory pointer to some default value that you will be able to change only by requesting a writable pointer. Later on a garbage collector can come online and try to merge back some of those pointers.
- Since (EFL) :
- 1.8.0
Functions | |
| Eina_Cow * | eina_cow_add (const char *name, unsigned int struct_size, unsigned int step, const void *default_value, Eina_Bool gc) |
| Instantiates a new Eina_Cow pool. | |
| void | eina_cow_del (Eina_Cow *cow) |
| Destroys an Eina_Cow pool and all the allocated memory. | |
| const Eina_Cow_Data * | eina_cow_alloc (Eina_Cow *cow) |
| Returns an initialized pointer from the pool. | |
| void | eina_cow_free (Eina_Cow *cow, const Eina_Cow_Data **data) |
| Frees a pointer from the pool. | |
| void * | eina_cow_write (Eina_Cow *cow, const Eina_Cow_Data *const *src) |
| Gets a writeable pointer from a const pointer. | |
| void | eina_cow_done (Eina_Cow *cow, const Eina_Cow_Data *const *dst, const void *data, Eina_Bool needed_gc) |
| Sets back a pointer into read only. | |
| void | eina_cow_memcpy (Eina_Cow *cow, const Eina_Cow_Data *const *dst, const Eina_Cow_Data *src) |
| Makes the destination contain the same thing as the source pointer. | |
| Eina_Bool | eina_cow_gc (Eina_Cow *cow) |
| Tries to find entries that have the same content and update them. | |
Typedefs | |
| typedef struct _Eina_Cow | Eina_Cow |
| typedef void | Eina_Cow_Data |
Defines | |
| #define | EINA_COW_WRITE_BEGIN(Cow, Read, Write_Type, Write) |
| Definition for the macro to setup a writeable pointer from a const one. | |
| #define | EINA_COW_WRITE_END(Cow, Read, Write) |
| Definition for the macro to close the writeable pointer. | |
| #define | EINA_COW_WRITE_END_NOGC(Cow, Read, Write) |
| Definition for the macro to close the writeable pointer without triggering the GC. | |
Define Documentation
| #define EINA_COW_WRITE_BEGIN | ( | Cow, | |
| Read, | |||
| Write_Type, | |||
| Write | |||
| ) |
do \ { \ Write_Type *Write; \ \ Write = eina_cow_write(Cow, ((const Eina_Cow_Data**)&(Read)));
Definition for the macro to setup a writeable pointer from a const one.
- Parameters:
-
[in,out] Cow The Eina_Cow where the const pointer came from. [in] Read The const pointer to get a writable handler from. [in] Write_Type The type of the pointer you want to write to. [in] Write The name of the variable where to put the writeable pointer to.
- Since (EFL) :
- 1.8.0
- Note:
- This macro opens a C scope that is expected to be closed by EINA_COW_WRITE_END().
| #define EINA_COW_WRITE_END | ( | Cow, | |
| Read, | |||
| Write | |||
| ) |
eina_cow_done(Cow, ((const Eina_Cow_Data**)&(Read)), Write, \ EINA_TRUE); \ } \ while (0);
Definition for the macro to close the writeable pointer.
- Parameters:
-
[in,out] Cow The Eina_Cow where the const pointer came from. [in] Read The const pointer to get a writable handler from. [in] Write The name of the variable where to put the writeable pointer to.
- Since (EFL) :
- 1.8.0
- Note:
- This macro closes the scope opened by EINA_COW_WRITE_BEGIN().
| #define EINA_COW_WRITE_END_NOGC | ( | Cow, | |
| Read, | |||
| Write | |||
| ) |
eina_cow_done(Cow, ((const Eina_Cow_Data**)&(Read)), Write, \ EINA_FALSE); \ } \ while (0);
Definition for the macro to close the writeable pointer without triggering the GC.
- Parameters:
-
[in,out] Cow The Eina_Cow where the const pointer came from. [in] Read The const pointer to get a writable handler from. [in] Write The name of the variable where to put the writeable pointer to.
- Since (EFL) :
- 1.8.0
- Note:
- This macro closes the scope opened by EINA_COW_WRITE_BEGIN().
Typedef Documentation
Type for Eina_Cow pool
Type of the returned pointer to simplify some reading.
Function Documentation
| Eina_Cow* eina_cow_add | ( | const char * | name, |
| unsigned int | struct_size, | ||
| unsigned int | step, | ||
| const void * | default_value, | ||
| Eina_Bool | gc | ||
| ) |
Instantiates a new Eina_Cow pool.
- Parameters:
-
[in] name The name of this pool, used for debugging. [in] struct_size The size of the object from this pool. [in] step How many objects to allocate when the pool gets empty. [in] default_value The default value returned by this pool. [in] gc Is it possible to run garbage collection on this pool.
- Returns:
- A valid new Eina_Cow, or
NULLon error.
- Since :
- 3.0
| const Eina_Cow_Data* eina_cow_alloc | ( | Eina_Cow * | cow | ) |
Returns an initialized pointer from the pool.
- Parameters:
-
[in] cow The pool to take things from.
- Returns:
- A pointer to the new pool instance
- Since :
- 3.0
| void eina_cow_del | ( | Eina_Cow * | cow | ) |
Destroys an Eina_Cow pool and all the allocated memory.
- Parameters:
-
[in] cow The pool to destroy
- Since :
- 3.0
| void eina_cow_done | ( | Eina_Cow * | cow, |
| const Eina_Cow_Data *const * | dst, | ||
| const void * | data, | ||
| Eina_Bool | needed_gc | ||
| ) |
Sets back a pointer into read only.
- Parameters:
-
[in,out] cow The pool the pointer came from. [in] dst The read only version of the pointer. [in] data The pointer to which data was written to. [in] needed_gc Does this pool need to be garbage collected?
- Note:
- This function is not thread safe.
- Since :
- 3.0
| void eina_cow_free | ( | Eina_Cow * | cow, |
| const Eina_Cow_Data ** | data | ||
| ) |
Frees a pointer from the pool.
- Parameters:
-
[in,out] cow The pool to gave back memory to. [in] data The data to give back.
- Note:
- To simplify the caller code *data will point to the default read only state after the call to this function.
- Since :
- 3.0
| Eina_Bool eina_cow_gc | ( | Eina_Cow * | cow | ) |
Tries to find entries that have the same content and update them.
- Parameters:
-
[in,out] cow The cow to try to compact.
- Returns:
- EINA_TRUE if something was compacted, EINA_FALSE if nothing was.
There is no guaranty in the time it will require, but should remain low. It does run a hash function on all possible common structures trying to find the one that matches and merge them into one pointer.
- Since :
- 3.0
| void eina_cow_memcpy | ( | Eina_Cow * | cow, |
| const Eina_Cow_Data *const * | dst, | ||
| const Eina_Cow_Data * | src | ||
| ) |
Makes the destination contain the same thing as the source pointer.
- Parameters:
-
[in,out] cow The pool the pointers came from. [in] dst The destination to update. [in] src The source of information to copy.
- Since :
- 3.0
| void* eina_cow_write | ( | Eina_Cow * | cow, |
| const Eina_Cow_Data *const * | src | ||
| ) |
Gets a writeable pointer from a const pointer.
- Parameters:
-
[in,out] cow The pool the pointer came from. [in] src The pointer you want to write to.
- Note:
- This function is not thread safe.
- Since :
- 3.0