浏览代码

Count elements pushed using std::tuple correctly

Ole Krüger 10 年之前
父节点
当前提交
b4c0f5b9c6
共有 1 个文件被更改,包括 10 次插入7 次删除
  1. 10 7
      lib/luwra/types.hpp

+ 10 - 7
lib/luwra/types.hpp

@@ -249,17 +249,21 @@ namespace internal {
 	template <size_t I>
 	struct StackPusher<std::index_sequence<I>> {
 		template <typename T> static inline
-		void Push(State* state, const T& package) {
-			Value<typename std::tuple_element<I, T>::type>::Push(state, std::get<I>(package));
+		int Push(State* state, const T& package) {
+			return Value<typename std::tuple_element<I, T>::type>::Push(state, std::get<I>(package));
 		}
 	};
 
 	template <size_t I, size_t... Is>
 	struct StackPusher<std::index_sequence<I, Is...>> {
 		template <typename T> static inline
-		void Push(State* state, const T& package) {
-			Value<typename std::tuple_element<I, T>::type>::Push(state, std::get<I>(package));
-			StackPusher<std::index_sequence<Is...>>::Push(state, package);
+		int Push(State* state, const T& package) {
+			int r = Value<typename std::tuple_element<I, T>::type>::Push(
+				state,
+				std::get<I>(package)
+			);
+
+			return std::max(0, r) + StackPusher<std::index_sequence<Is...>>::Push(state, package);
 		}
 	};
 }
@@ -276,8 +280,7 @@ struct Value<std::tuple<A...>> {
 
 	static inline
 	int Push(State* state, const std::tuple<A...>& value) {
-		internal::StackPusher<std::make_index_sequence<sizeof...(A)>>::Push(state, value);
-		return sizeof...(A);
+		return internal::StackPusher<std::make_index_sequence<sizeof...(A)>>::Push(state, value);
 	}
 };