These functions provide some helper for a pseudo Copy On Write mechanism. 
Eina_Cow will return 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 pointer.
- 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 Documentation
Value:
Definition for the macro to setup a writeable pointer from a const one. 
- Parameters:
 - 
  
    | Cow | The Eina_Cow where the const pointer come from.  | 
    | Read | The const pointer to get a writable handler from.  | 
    | Write_Type | The type of the pointer you want to write to.  | 
    | Write | The name of the variable where to put the writeable pointer to.  | 
  
   
- Since (EFL) :
 - 1.8.0
 
Be careful this macro opens a C scope that is expected to be closed by EINA_COW_WRITE_END(). 
 
 
Value:
Definition for the macro to close the writeable pointer. 
- Parameters:
 - 
  
    | Cow | The Eina_Cow where the const pointer come from.  | 
    | Read | The const pointer to get a writable handler from.  | 
    | Write | The name of the variable where to put the writeable pointer to.  | 
  
   
- Since (EFL) :
 - 1.8.0
 
Be careful this macro close the scope opened by EINA_COW_WRITE_BEGIN(). 
 
 
Typedef Documentation
Type of the returned pointer to simplify some reading. 
 
 
Function Documentation
Instantiates a new Eina_Cow pool. 
- Parameters:
 - 
  
    | name | The name of this pool, used for debug.  | 
    | struct_size | The size of the object from this pool.  | 
    | step | How many objects to allocate when the pool gets empty.  | 
    | default_value | The default value returned by this pool.  | 
    | gc | Is it possible to run garbage collection on this pool.  | 
  
   
- Returns:
 - A valid new Eina_Cow, or 
NULL on error. 
- Since :
 - 3.0 
 
 
 
Returns an initialized pointer from the pool. 
- Parameters:
 - 
  
    | cow | The pool to take things from.  | 
  
   
- Returns:
 - A pointer to the new pool instance
 
- Since :
 - 3.0 
 
 
 
Destroys an Eina_Cow pool and all the allocated memory. 
- Parameters:
 - 
  
  
 
- Since :
 - 3.0 
 
 
 
Sets back a pointer into read only. 
- Parameters:
 - 
  
    | cow | The pool the pointer come from.  | 
    | dst | The read only version of the pointer.  | 
    | data | The pointer to which data was written to.  | 
    | needed_gc | Does this pool need to be garbage collected? | 
  
   
NOTE: this function is not thread safe, be careful.
- Since :
 - 3.0 
 
 
 
Frees a pointer from the pool. 
- Parameters:
 - 
  
    | cow | The pool to gave back memory to.  | 
    | 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 
 
 
 
Tries to find entries that have the same content and update them. 
- Parameters:
 - 
  
    | 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 match and merge them into one pointer.
- Since :
 - 3.0 
 
 
 
Makes the destination contain the same thing as the source pointer. 
- Parameters:
 - 
  
    | cow | The pool the pointers come from.  | 
    | dst | The destination to update.  | 
    | src | The source of information to copy. | 
  
   
- Since :
 - 3.0 
 
 
 
Gets a writeable pointer from a const pointer. 
- Parameters:
 - 
  
    | cow | The pool the pointer come from.  | 
    | src | The pointer you want to write to. | 
  
   
NOTE: this function is not thread safe, be careful.
- Since :
 - 3.0