Squashed 'third_party/rawrtc/re/' content from commit f3163ce8b

Change-Id: I6a235e6ac0f03269d951026f9d195da05c40fdab
git-subtree-dir: third_party/rawrtc/re
git-subtree-split: f3163ce8b526a13b35ef71ce4dd6f43585064d8a
diff --git a/include/re_mem.h b/include/re_mem.h
new file mode 100644
index 0000000..d09d5e2
--- /dev/null
+++ b/include/re_mem.h
@@ -0,0 +1,45 @@
+/**
+ * @file re_mem.h  Interface to Memory management with reference counting
+ *
+ * Copyright (C) 2010 Creytiv.com
+ */
+
+
+/**
+ * Defines the memory destructor handler, which is called when the reference
+ * of a memory object goes down to zero
+ *
+ * @param data Pointer to memory object
+ */
+typedef void (mem_destroy_h)(void *data);
+
+/** Memory Statistics */
+struct memstat {
+	size_t bytes_cur;    /**< Current bytes allocated      */
+	size_t bytes_peak;   /**< Peak bytes allocated         */
+	size_t blocks_cur;   /**< Current blocks allocated     */
+	size_t blocks_peak;  /**< Peak blocks allocated        */
+	size_t size_min;     /**< Lowest block size allocated  */
+	size_t size_max;     /**< Largest block size allocated */
+};
+
+void    *mem_alloc(size_t size, mem_destroy_h *dh);
+void    *mem_zalloc(size_t size, mem_destroy_h *dh);
+void    *mem_realloc(void *data, size_t size);
+void    *mem_reallocarray(void *ptr, size_t nmemb,
+			  size_t membsize, mem_destroy_h *dh);
+void    *mem_ref(void *data);
+void    *mem_deref(void *data);
+uint32_t mem_nrefs(const void *data);
+
+void     mem_debug(void);
+void     mem_threshold_set(ssize_t n);
+struct re_printf;
+int      mem_status(struct re_printf *pf, void *unused);
+int      mem_get_stat(struct memstat *mstat);
+
+
+/* Secure memory functions */
+int  mem_seccmp(const volatile uint8_t *volatile s1,
+		const volatile uint8_t *volatile s2,
+		size_t n);