From: Mattia Basaglia <mattia.basaglia@gmail.com>
Date: Mon, 20 Jul 2015 21:15:28 +0000 (+0200)
Subject: Replace custom Array with std::vector - friendly version
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=ff94c74142a8d5e10586145b3cc82af2fca62e43;p=xonotic%2Fnetradiant.git

Replace custom Array with std::vector - friendly version
---

diff --git a/libs/container/array.h b/libs/container/array.h
index c359df15..57d2f6b0 100644
--- a/libs/container/array.h
+++ b/libs/container/array.h
@@ -22,6 +22,14 @@
 #if !defined( INCLUDED_CONTAINER_ARRAY_H )
 #define INCLUDED_CONTAINER_ARRAY_H
 
+#include <vector>
+/// \todo remove the custom allocator
+#include "memory/allocator.h"
+template<typename Element, typename Allocator = DefaultAllocator<Element> >
+using Array = std::vector<Element, Allocator>;
+/// \todo replace Array<char> with std::string
+
+#if 0
 #include <cstddef>
 #include <algorithm>
 
@@ -166,5 +174,6 @@ inline void swap( Array<Element, Allocator>& self, Array<Element, Allocator>& ot
 	self.swap( other );
 }
 }
+#endif
 
 #endif
diff --git a/libs/memory/allocator.h b/libs/memory/allocator.h
index bef7d7cb..67961206 100644
--- a/libs/memory/allocator.h
+++ b/libs/memory/allocator.h
@@ -93,6 +93,15 @@ inline bool operator==( const DefaultAllocator<Type>&, const OtherAllocator& ){
 	return false;
 }
 
+template<typename Type, typename Other>
+inline bool operator!=( const DefaultAllocator<Type>&, const DefaultAllocator<Other>& ){
+	return false;
+}
+template<typename Type, typename OtherAllocator>
+inline bool operator!=( const DefaultAllocator<Type>&, const OtherAllocator& ){
+	return true;
+}
+
 #endif
 
 
diff --git a/radiant/patch.cpp b/radiant/patch.cpp
index dca55b79..98425be8 100644
--- a/radiant/patch.cpp
+++ b/radiant/patch.cpp
@@ -215,13 +215,13 @@ bool Patch::isValid() const {
 		return false;
 	}
 
-	for ( const_iterator i = m_ctrl.begin(); i != m_ctrl.end(); ++i )
+	for ( const auto& i : m_ctrl )
 	{
-		if ( !float_valid( ( *i ).m_vertex.x() )
-			 || !float_valid( ( *i ).m_vertex.y() )
-			 || !float_valid( ( *i ).m_vertex.z() )
-			 || !float_valid( ( *i ).m_texcoord.x() )
-			 || !float_valid( ( *i ).m_texcoord.y() ) ) {
+		if ( !float_valid( i.m_vertex.x() )
+			 || !float_valid( i.m_vertex.y() )
+			 || !float_valid( i.m_vertex.z() )
+			 || !float_valid( i.m_texcoord.x() )
+			 || !float_valid( i.m_texcoord.y() ) ) {
 			globalErrorStream() << "patch has invalid control points\n";
 			return false;
 		}
diff --git a/radiant/patch.h b/radiant/patch.h
index cadb0e13..9e1bb16d 100644
--- a/radiant/patch.h
+++ b/radiant/patch.h
@@ -861,20 +861,20 @@ int getShaderFlags() const {
 	return 0;
 }
 
-typedef PatchControl* iterator;
-typedef const PatchControl* const_iterator;
+typedef PatchControlArray::iterator iterator;
+typedef PatchControlArray::const_iterator const_iterator;
 
 iterator begin(){
-	return m_ctrl.data();
+	return m_ctrl.begin();
 }
 const_iterator begin() const {
-	return m_ctrl.data();
+	return m_ctrl.begin();
 }
 iterator end(){
-	return m_ctrl.data() + m_ctrl.size();
+	return m_ctrl.end();
 }
 const_iterator end() const {
-	return m_ctrl.data() + m_ctrl.size();
+	return m_ctrl.end();
 }
 
 PatchControlArray& getControlPoints(){
@@ -1557,7 +1557,7 @@ bool selectedVertices(){
 
 void transformComponents( const Matrix4& matrix ){
 	if ( selectedVertices() ) {
-		PatchControlIter ctrl = m_patch.getControlPointsTransformed().begin();
+		PatchControlIter ctrl = m_patch.getControlPointsTransformed().data();
 		for ( PatchControlInstances::iterator i = m_ctrl_instances.begin(); i != m_ctrl_instances.end(); ++i, ++ctrl )
 		{
 			if ( ( *i ).m_selectable.isSelected() ) {
diff --git a/radiant/renderstate.cpp b/radiant/renderstate.cpp
index 11c7b64b..ede25740 100644
--- a/radiant/renderstate.cpp
+++ b/radiant/renderstate.cpp
@@ -132,7 +132,7 @@ void printShaderLog( GLhandleARB object ){
 	Array<char> log( log_length );
 	glGetInfoLogARB( object, log_length, &log_length, log.data() );
 
-	globalErrorStream() << StringRange( log.begin(), log.begin() + log_length ) << "\n";
+	globalErrorStream() << StringRange( log.data(), log.data() + log_length ) << "\n";
 }
 
 void createShader( GLhandleARB program, const char* filename, GLenum type ){
diff --git a/radiant/selection.cpp b/radiant/selection.cpp
index 5013af7b..2e481b40 100644
--- a/radiant/selection.cpp
+++ b/radiant/selection.cpp
@@ -684,7 +684,7 @@ struct FlatShadedVertex
 };
 
 
-typedef FlatShadedVertex* FlatShadedVertexIterator;
+typedef Array<FlatShadedVertex>::iterator FlatShadedVertexIterator;
 void Triangles_BestPoint( const Matrix4& local2view, clipcull_t cull, FlatShadedVertexIterator first, FlatShadedVertexIterator last, SelectionIntersection& best ){
 	for ( FlatShadedVertexIterator x( first ), y( first + 1 ), z( first + 2 ); x != last; x += 3, y += 3, z += 3 )
 	{