Flatbuffers Merge commit '8cd6f0538a362ceefbcfcbf6c7b8b3f341d1fb41' into master

Upgrade flatbuffers to the latest.

Change-Id: I901787ac6fc5d7ce2c4019cc0d275de68086b4d8
diff --git a/third_party/flatbuffers/reflection/generate_code.bat b/third_party/flatbuffers/reflection/generate_code.bat
index e299325..7b0f4d8 100644
--- a/third_party/flatbuffers/reflection/generate_code.bat
+++ b/third_party/flatbuffers/reflection/generate_code.bat
@@ -15,4 +15,4 @@
 set buildtype=Release
 if "%1"=="-b" set buildtype=%2
 
-..\%buildtype%\flatc.exe --cpp --no-prefix -o ../include/flatbuffers reflection.fbs || exit /b 1
+..\%buildtype%\flatc.exe --cpp --cpp-std c++0x --no-prefix -o ../include/flatbuffers reflection.fbs || exit /b 1
diff --git a/third_party/flatbuffers/reflection/generate_code.sh b/third_party/flatbuffers/reflection/generate_code.sh
index 6e12c3d..b4cde5d 100755
--- a/third_party/flatbuffers/reflection/generate_code.sh
+++ b/third_party/flatbuffers/reflection/generate_code.sh
@@ -15,4 +15,18 @@
 # limitations under the License.
 set -e
 
-../../../bazel-out/host/bin/external/com_github_google_flatbuffers/flatc -c --gen-object-api --reflect-names --no-prefix -o ../include/flatbuffers reflection.fbs
+tempDir="../include/flatbuffers/.tmp"
+originalFile="../include/flatbuffers/reflection_generated.h"
+newFile="$tempDir/reflection_generated.h"
+
+../../../bazel-bin/external/com_github_google_flatbuffers/flatc -c --gen-object-api --reflect-names  --cpp-std c++0x --no-prefix -o $tempDir reflection.fbs
+
+if [ -f "$newFile" ]; then
+  if ! cmp -s "$originalFile" "$newFile"; then
+    mv $newFile $originalFile
+  else
+    rm $newFile
+  fi
+  rmdir $tempDir
+fi
+
diff --git a/third_party/flatbuffers/reflection/reflection.fbs b/third_party/flatbuffers/reflection/reflection.fbs
index 8fed025..d9e2dc4 100644
--- a/third_party/flatbuffers/reflection/reflection.fbs
+++ b/third_party/flatbuffers/reflection/reflection.fbs
@@ -24,12 +24,15 @@
     Vector,
     Obj,     // Used for tables & structs.
     Union,
-    Array
+    Array,
+
+    // Add any new type above this value.
+    MaxBaseType
 }
 
 table Type {
     base_type:BaseType;
-    element:BaseType = None;  // Only if base_type == Vector 
+    element:BaseType = None;  // Only if base_type == Vector
                               // or base_type == Array.
     index:int = -1;  // If base_type == Object, index into "objects" below.
                      // If base_type == Union, UnionType, or integral derived
@@ -71,6 +74,7 @@
     key:bool = false;
     attributes:[KeyValue];
     documentation:[string];
+    optional:bool = false;
 }
 
 table Object {  // Used for both tables and structs.