<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Sep 16, 2013 at 5:31 AM, Gopu Govindaswamy <span dir="ltr"><<a href="mailto:gopu@multicorewareinc.com" target="_blank">gopu@multicorewareinc.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"># HG changeset patch<br>
# User Gopu Govindaswamy <<a href="mailto:gopu@multicorewareinc.com">gopu@multicorewareinc.com</a>><br>
# Date 1379327475 -19800<br>
# Node ID e499466c7c6591345af2a625da12185c7735347b<br>
# Parent  6bab41a554b36133865fe3378964cb9e76c24ebd<br>
List: std::list Implementation<br>
<br>
To remove the std::list dependency from X265,  and this class can be enhanced based on the types of std::list API's used in current x265<br>
<br>
diff -r 6bab41a554b3 -r e499466c7c65 source/common/CMakeLists.txt<br>
--- a/source/common/CMakeLists.txt      Fri Sep 13 17:24:05 2013 +0530<br>
+++ b/source/common/CMakeLists.txt      Mon Sep 16 16:01:15 2013 +0530<br>
@@ -16,8 +16,10 @@<br>
<br>
 file(GLOB LIBCOMMON_HDR ../Lib/TLibCommon/*.h)<br>
 file(GLOB LIBCOMMON_SRC ../Lib/TLibCommon/*.cpp)<br></blockquote><div><br></div><div style>the CMakeLists.txt file in the source/ folder will need a line like this:</div><div style><br></div><div style>include_directories(util)<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
+file(GLOB LIBUTIL ../util/*.cpp ../util/*.h)<br></blockquote><div><br></div><div style>the LIB prefix to LIBUTIL is unnecessary, it doesn't live in the Lib/ folder</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

 source_group(TLibCommon FILES ${LIBCOMMON_SRC})<br>
 source_group(TLibCommonH FILES ${LIBCOMMON_HDR})<br>
+source_group(Util FILES ${LIBUTIL})<br>
 if(GCC)<br>
     set_source_files_properties(${LIBCOMMON_SRC} PROPERTIES COMPILE_FLAGS<br>
         "-Wno-sign-compare")<br>
@@ -38,7 +40,7 @@<br>
 endif(MSVC)<br>
<br>
 add_library(common STATIC ../../COPYING<br>
-    ${LIBCOMMON_SRC} ${LIBCOMMON_HDR}<br>
+    ${LIBCOMMON_SRC} ${LIBCOMMON_HDR} ${LIBUTIL}<br>
     primitives.cpp primitives.h<br>
     pixel.cpp dct.cpp ipfilter.cpp intrapred.cpp<br>
     ../VectorClass/instrset_detect.cpp<br>
diff -r 6bab41a554b3 -r e499466c7c65 source/util/list.h<br>
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000<br>
+++ b/source/util/list.h        Mon Sep 16 16:01:15 2013 +0530<br>
@@ -0,0 +1,158 @@<br>
+/*****************************************************************************<br>
+ * Copyright (C) 2013 x265 project<br>
+ *<br>
+ * Authors: Gopu Govindaswamy <<a href="mailto:gopu@multicorewareinc.com">gopu@multicorewareinc.com</a>><br>
+ *<br>
+ * This program is free software; you can redistribute it and/or modify<br>
+ * it under the terms of the GNU General Public License as published by<br>
+ * the Free Software Foundation; either version 2 of the License, or<br>
+ * (at your option) any later version.<br>
+ *<br>
+ * This program is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>
+ * GNU General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU General Public License<br>
+ * along with this program; if not, write to the Free Software<br>
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.<br>
+ *<br>
+ * This program is also available under a commercial proprietary license.<br>
+ * For more information, contact us at <a href="mailto:licensing@multicorewareinc.com">licensing@multicorewareinc.com</a>.<br>
+ *****************************************************************************/<br>
+<br>
+#ifndef X265_LIST_H<br>
+#define X265_LIST_H<br>
+<br>
+#include "common.h"<br>
+<br>
+// Short Notes:<br>
+// Under development<br>
+// this class is used to remove the std::list dependency from x265,<br>
+// Providing Minimum std::list API implementation<br></blockquote><div><br></div><div style>either list a negative list (of unsupported APIs) or a positive list (of supported APIs).  I'm not sure I follow the capitalization policy of that sentence.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
+// this class can be enhanced based on types of std::list API's used in current x265<br></blockquote><div><br></div><div style>this comment is pretty redundant, can be removed.  You could say we only support APIs used by x265, which is at least informative.</div>
<div style><br></div><div style>Also add a comment stating this class does not pretend to be thread-safe</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

+<br>
+template<class T><br>
+struct List<br>
+{<br>
+private:<br>
+<br>
+    struct Node<br>
+    {<br>
+        T object;<br>
+        Node* next;<br>
+    };<br>
+<br>
+public:<br>
+<br>
+    Node* head;<br>
+    Node* tail;<br>
+    int size;<br>
+<br>
+    List() { head = 0; size = 0; }<br></blockquote><div><br></div><div style>tail is uninitialized</div><div style> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

+<br>
+    inline T* begin() { return head; }<br>
+<br>
+    inline T* end() { return tail; }<br>
+<br>
+    inline bool isEmpty()<br>
+    {<br></blockquote><div><br></div><div style>would be helpful to assert head == NULL and size == 0 here</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

+        if (head == NULL)<br>
+            return true;<br>
+        else<br>
+            return false;<br>
+    }<br>
+<br>
+    inline void push_back(T value)<br>
+    {<br>
+        if (head == NULL)<br>
+        {<br>
+            head = (Node*)X265_MALLOC(Node, sizeof(Node));<br></blockquote><div><br></div><div style>these mallocs are wrong.  the arguments to X265_MALLOC are type, count</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

+            head->object = value;<br>
+            head->next = NULL;<br>
+            tail = head;<br>
+        }<br>
+        else<br>
+        {<br>
+            Node *nodePtr = tail;<br>
+            nodePtr->next = (Node*)X265_MALLOC(Node, sizeof(Node));<br>
+            nodePtr->next->object = value;<br>
+            nodePtr->next->next = NULL;<br>
+            tail = nodePtr->next;<br>
+        }<br>
+        size += 1;<br>
+    }<br>
+<br>
+    inline void push_front(T value)<br>
+    {<br>
+        if (head == NULL)<br>
+        {<br>
+            head = (Node*)X265_MALLOC(Node, sizeof(Node));<br>
+            head->object = value;<br>
+            head->next = NULL;<br>
+            tail = head;<br>
+        }<br>
+        else<br>
+        {<br>
+            Node *front;<br>
+            front = (Node*)X265_MALLOC(Node, sizeof(Node));<br>
+            front->object = value;<br>
+            front->next = head;<br>
+            head = front;<br>
+        }<br>
+        size += 1;<br>
+    }<br>
+<br>
+    inline void pop_front()<br>
+    {<br>
+        if (head != NULL)<br>
+        {<br>
+            if (head->next == NULL)<br>
+                X265_FREE(head);<br>
+            else<br>
+            {<br>
+                Node *temp = head->next;<br>
+                X265_FREE(head);<br>
+                head = temp;<br>
+            }<br>
+            size -= 1;<br>
+        }<br>
+    }<br>
+<br>
+    inline void pop_back()<br>
+    {<br>
+        if (head != NULL)<br>
+        {<br>
+            if (head->next == NULL)<br>
+                X265_FREE(head);<br></blockquote><div><br></div><div style>uhm, no. this is all-bad</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

+            else<br>
+            {<br>
+                Node *ptr = head, *ptr1 = NULL;<br>
+                while (ptr->next != NULL)<br>
+                {<br>
+                    ptr1 = ptr;<br>
+                    ptr = ptr->next;<br>
+                }<br>
+<br>
+                X265_FREE(ptr1->next);<br>
+                ptr1->next = NULL;<br>
+            }<br>
+            size -= 1;<br>
+        }<br></blockquote><div><br></div><div style>to do this efficiently it needs to be doubly-linked</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

+    }<br>
+<br>
+    inline void remove_all()<br>
+    {<br>
+        Node *temp = head;<br>
+        Node *remove;<br>
+<br>
+        while (temp->next != NULL)<br>
+        {<br>
+            remove = temp->next;<br>
+            X265_FREE(temp);<br>
+            temp = remove;<br>
+        }<br>
+    }<br>
+};<br>
+<br>
+#endif // ifndef X265_LIST_H<br>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Steve Borho
</div></div>