Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(844)

Unified Diff: runtime/vm/json.h

Issue 9949054: Basic support for reading and writing JSON objects. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | runtime/vm/json.cc » ('j') | runtime/vm/json.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/json.h
===================================================================
--- runtime/vm/json.h (revision 0)
+++ runtime/vm/json.h (revision 0)
@@ -0,0 +1,118 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef VM_JSON_H_
+#define VM_JSON_H_
+
+#include "vm/allocation.h"
+#include "vm/globals.h"
+
+namespace dart {
+
+
+// A low level interface to tokenize JSON strings.
turnidge 2012/04/09 22:26:42 Will anybody ever use this directly, or will they
hausner 2012/04/10 16:26:51 The JSONReader declarations in this file need it.
+class JSONScanner : ValueObject {
+ public:
+ enum Token {
+ TokenIllegal = 0,
+ TokenLBrace,
+ TokenRBrace,
+ TokenLBrack,
+ TokenRBrack,
+ TokenColon,
+ TokenComma,
+ TokenString,
+ TokenInteger,
+ TokenTrue,
+ TokenFalse,
+ TokenNull,
+ TokenEOM
+ };
+ explicit JSONScanner(const char* msg);
turnidge 2012/04/09 22:26:42 For consistency, consider renaming msg -> json_obj
hausner 2012/04/10 16:26:51 Done.
+
+ void Set(const char* str);
turnidge 2012/04/09 22:26:42 str -> json_object
hausner 2012/04/10 16:26:51 Done.
+ void Scan();
+ Token CurrentToken() const { return token_; }
+ bool EOM() const { return token_ == TokenEOM; }
+ const char* TokenChars() const { return token_start_; }
+ int TokenLen() const { return token_length_; }
+ bool IsStringLiteral(const char* literal) const;
+ void Skip(Token matching_token);
+
+ private:
+ bool IsLetter(char ch) const;
+ bool IsDigit(char ch) const;
+ bool IsLiteral(const char* literal);
+ void ScanNumber();
+ void ScanString();
+ void Recognize(Token t);
+
+ const char* current_pos_;
+ const char* token_start_;
+ int token_length_;
+ Token token_;
+ const char* string_;
turnidge 2012/04/09 22:26:42 string_ => json_object_
hausner 2012/04/10 16:26:51 Actuall, string_ wasn't even used anywhere. Remove
+};
+
+
+// JSONReader is a higher level interface that allows for lookup of
+// name-value pairs in JSON objects.
turnidge 2012/04/09 22:26:42 JSONReader reparses the whole json text on every c
hausner 2012/04/10 16:26:51 As we discussed in person, this is a low-level int
+class JSONReader : ValueObject {
+ public:
+ enum JSONType {
+ kString,
+ kInteger,
+ kObject,
+ kArray,
+ kLiteral,
+ kNone
+ };
+
+ explicit JSONReader(const char* json_object);
+ void Set(const char* json_object);
turnidge 2012/04/09 22:26:42 Set is a pretty generic name. Consider something
hausner 2012/04/10 16:26:51 Done.
+
+ // Returns true if the a pair with the given name was found.
turnidge 2012/04/09 22:26:42 typo: "the a"
hausner 2012/04/10 16:26:51 Done.
+ bool Seek(const char* name);
+
+ // Returns true if a syntax error was found.
+ bool Error() const { return error_; }
+
+ JSONType Type() const;
+ const char* ValueChars() const {
+ return (Type() != kNone) ? scanner_.TokenChars() : NULL;
+ }
+ int ValueLen() const {
+ return (Type() != kNone) ? scanner_.TokenLen() : 0;
+ }
+ bool IsStringLiteral(const char* literal) const {
+ return scanner_.IsStringLiteral(literal);
+ }
+
+ private:
+ JSONScanner scanner_;
+ const char* json_object_;
+ bool error_;
+};
+
+
turnidge 2012/04/09 22:26:42 Add a class-level comment here?
hausner 2012/04/10 16:26:51 Done.
+class JSONWriter : ValueObject {
turnidge 2012/04/09 22:26:42 It's confusing to call this a JSONWriter since it
hausner 2012/04/10 16:26:51 I agree, this has nothing to do with JSON at this
+ public:
+ explicit JSONWriter(intptr_t buf_size);
+ ~JSONWriter();
+
+ intptr_t Printf(const char* format, ...);
+ void Clear();
+
+ char* buf() { return buf_; }
+
+ private:
+ void GrowBuffer(intptr_t len);
+ char* buf_;
+ intptr_t buf_size_;
+ intptr_t msg_len_;
+};
+
+} // namespace dart
+
+#endif // VM_JSON_H_
« no previous file with comments | « no previous file | runtime/vm/json.cc » ('j') | runtime/vm/json.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698