On Mon, Sep 16, 2013 at 5:31 AM, Gopu Govindaswamy
g...@multicorewareinc.com wrote:
# HG changeset patch
# User Gopu Govindaswamy g...@multicorewareinc.com
# Date 1379327475 -19800
# Node ID e499466c7c6591345af2a625da12185c7735347b
# Parent 6bab41a554b36133865fe3378964cb9e76c24ebd
List: std::list Implementation
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
diff -r 6bab41a554b3 -r e499466c7c65 source/common/CMakeLists.txt
--- a/source/common/CMakeLists.txt Fri Sep 13 17:24:05 2013 +0530
+++ b/source/common/CMakeLists.txt Mon Sep 16 16:01:15 2013 +0530
@@ -16,8 +16,10 @@
file(GLOB LIBCOMMON_HDR ../Lib/TLibCommon/*.h)
file(GLOB LIBCOMMON_SRC ../Lib/TLibCommon/*.cpp)
the CMakeLists.txt file in the source/ folder will need a line like this:
include_directories(util)
+file(GLOB LIBUTIL ../util/*.cpp ../util/*.h)
the LIB prefix to LIBUTIL is unnecessary, it doesn't live in the Lib/ folder
source_group(TLibCommon FILES ${LIBCOMMON_SRC})
source_group(TLibCommonH FILES ${LIBCOMMON_HDR})
+source_group(Util FILES ${LIBUTIL})
if(GCC)
set_source_files_properties(${LIBCOMMON_SRC} PROPERTIES COMPILE_FLAGS
-Wno-sign-compare)
@@ -38,7 +40,7 @@
endif(MSVC)
add_library(common STATIC ../../COPYING
-${LIBCOMMON_SRC} ${LIBCOMMON_HDR}
+${LIBCOMMON_SRC} ${LIBCOMMON_HDR} ${LIBUTIL}
primitives.cpp primitives.h
pixel.cpp dct.cpp ipfilter.cpp intrapred.cpp
../VectorClass/instrset_detect.cpp
diff -r 6bab41a554b3 -r e499466c7c65 source/util/list.h
--- /dev/null Thu Jan 01 00:00:00 1970 +
+++ b/source/util/list.hMon Sep 16 16:01:15 2013 +0530
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2013 x265 project
+ *
+ * Authors: Gopu Govindaswamy g...@multicorewareinc.com
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111,
USA.
+ *
+ * This program is also available under a commercial proprietary license.
+ * For more information, contact us at licens...@multicorewareinc.com.
+
*/
+
+#ifndef X265_LIST_H
+#define X265_LIST_H
+
+#include common.h
+
+// Short Notes:
+// Under development
+// this class is used to remove the std::list dependency from x265,
+// Providing Minimum std::list API implementation
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.
+// this class can be enhanced based on types of std::list API's used in
current x265
this comment is pretty redundant, can be removed. You could say we only
support APIs used by x265, which is at least informative.
Also add a comment stating this class does not pretend to be thread-safe
+
+templateclass T
+struct List
+{
+private:
+
+struct Node
+{
+T object;
+Node* next;
+};
+
+public:
+
+Node* head;
+Node* tail;
+int size;
+
+List() { head = 0; size = 0; }
tail is uninitialized
+
+inline T* begin() { return head; }
+
+inline T* end() { return tail; }
+
+inline bool isEmpty()
+{
would be helpful to assert head == NULL and size == 0 here
+if (head == NULL)
+return true;
+else
+return false;
+}
+
+inline void push_back(T value)
+{
+if (head == NULL)
+{
+head = (Node*)X265_MALLOC(Node, sizeof(Node));
these mallocs are wrong. the arguments to X265_MALLOC are type, count
+head-object = value;
+head-next = NULL;
+tail = head;
+}
+else
+{
+Node *nodePtr = tail;
+nodePtr-next = (Node*)X265_MALLOC(Node, sizeof(Node));
+nodePtr-next-object = value;
+nodePtr-next-next = NULL;
+tail = nodePtr-next;
+}
+size += 1;
+}
+
+inline void push_front(T value)
+{
+if (head == NULL)
+{
+head = (Node*)X265_MALLOC(Node, sizeof(Node));
+head-object = value;
+