From e9fb4af89d2177a3ec9ee1abf3f4150706bd71b4 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Fri, 27 Apr 2012 13:18:12 +1000 Subject: [PATCH] Allow json-to-vectors with 1/2/3 dimensions --- vector.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/vector.cpp b/vector.cpp index de9bbc1b..db391c0c 100644 --- a/vector.cpp +++ b/vector.cpp @@ -206,9 +206,28 @@ util::operator<< (std::ostream &os, const util::vector &v) { const json::node& util::operator>> (const json::node &node, util::vector &v) { - v.x = node[0].as_number (); - v.y = node[1].as_number (); - v.z = node[2].as_number (); + const json::array &array = node.as_array (); - return node; + switch (array.size ()) { + case 1: + v.x = array[0].as_number (); + v.y = std::numeric_limits::quiet_NaN (); + v.z = std::numeric_limits::quiet_NaN (); + return node; + + case 2: v.y = array[1].as_number (); + v.x = array[0].as_number (); + v.y = array[1].as_number (); + v.z = std::numeric_limits::quiet_NaN (); + return node; + + case 3: v.z = array[2].as_number (); + v.x = array[0].as_number (); + v.y = array[1].as_number (); + v.z = array[2].as_number (); + return node; + + default: + throw std::runtime_error ("Invalid dimensionality for json-to-vector"); + } }