You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by fi...@apache.org on 2013/05/16 21:39:48 UTC
[7/8] git commit: [BlackBerry10] Adding support for new BlackBerry10
platform - Also re-introduces tags Reviewed by Bryan Higgins
i
[BlackBerry10] Adding support for new BlackBerry10 platform
- Also re-introduces <lib-file> tags
Reviewed by Bryan Higgins <bh...@blackberry.com>i
Project: http://git-wip-us.apache.org/repos/asf/cordova-plugman/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugman/commit/759bce2b
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugman/tree/759bce2b
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugman/diff/759bce2b
Branch: refs/heads/bb10
Commit: 759bce2be35876f60215557a1cc96f57d61e84f1
Parents: b562e69
Author: Jeffrey Heifetz <jh...@blackberry.com>
Authored: Fri May 3 16:58:00 2013 -0400
Committer: Fil Maj <ma...@gmail.com>
Committed: Thu May 16 11:44:36 2013 -0700
----------------------------------------------------------------------
README.md | 23 +-
main.js | 2 +-
spec/install.spec.js | 4 +-
spec/platforms/blackberry.spec.js | 117 -
spec/platforms/blackberry10.spec.js | 177 ++
spec/plugins/DummyPlugin/plugin.xml | 8 +-
spec/plugins/DummyPlugin/src/blackberry/client.js | 19 -
spec/plugins/DummyPlugin/src/blackberry/index.js | 19 -
spec/plugins/DummyPlugin/src/blackberry10/index.js | 19 +
spec/plugins/FaultyPlugin/plugin.xml | 10 +-
spec/plugins/cordova.echo/plugin.xml | 21 +-
spec/plugins/cordova.echo/src/blackberry/client.js | 53 -
.../src/blackberry/device/echoJnext.so | Bin 1291818 -> 0 bytes
spec/plugins/cordova.echo/src/blackberry/index.js | 85 -
.../cordova.echo/src/blackberry/manifest.json | 5 -
.../src/blackberry/public/json/autolink.h | 19 -
.../src/blackberry/public/json/config.h | 43 -
.../src/blackberry/public/json/features.h | 42 -
.../src/blackberry/public/json/forwards.h | 39 -
.../cordova.echo/src/blackberry/public/json/json.h | 10 -
.../src/blackberry/public/json/reader.h | 196 --
.../src/blackberry/public/json/value.h | 1069 ---------
.../src/blackberry/public/json/writer.h | 174 --
.../src/blackberry/public/json_batchallocator.h | 125 --
.../src/blackberry/public/json_internalarray.inl | 448 ----
.../src/blackberry/public/json_internalmap.inl | 607 -----
.../src/blackberry/public/json_reader.cpp | 894 --------
.../src/blackberry/public/json_value.cpp | 1726 ---------------
.../src/blackberry/public/json_valueiterator.inl | 292 ---
.../src/blackberry/public/json_writer.cpp | 829 -------
.../cordova.echo/src/blackberry/public/plugin.cpp | 320 ---
.../cordova.echo/src/blackberry/public/plugin.h | 70 -
.../src/blackberry/public/tokenizer.cpp | 222 --
.../cordova.echo/src/blackberry/public/tokenizer.h | 55 -
.../src/blackberry/simulator/echoJnext.so | Bin 231778 -> 0 bytes
.../cordova.echo/src/blackberry/src/echo.cpp | 121 -
.../cordova.echo/src/blackberry/src/echo.hpp | 45 -
.../plugins/cordova.echo/src/blackberry10/index.js | 85 +
.../src/blackberry10/native/device/echoJnext.so | Bin 0 -> 1291818 bytes
.../src/blackberry10/native/public/json/autolink.h | 19 +
.../src/blackberry10/native/public/json/config.h | 43 +
.../src/blackberry10/native/public/json/features.h | 42 +
.../src/blackberry10/native/public/json/forwards.h | 39 +
.../src/blackberry10/native/public/json/json.h | 10 +
.../src/blackberry10/native/public/json/reader.h | 196 ++
.../src/blackberry10/native/public/json/value.h | 1069 +++++++++
.../src/blackberry10/native/public/json/writer.h | 174 ++
.../native/public/json_batchallocator.h | 125 ++
.../native/public/json_internalarray.inl | 448 ++++
.../native/public/json_internalmap.inl | 607 +++++
.../src/blackberry10/native/public/json_reader.cpp | 894 ++++++++
.../src/blackberry10/native/public/json_value.cpp | 1726 +++++++++++++++
.../native/public/json_valueiterator.inl | 292 +++
.../src/blackberry10/native/public/json_writer.cpp | 829 +++++++
.../src/blackberry10/native/public/plugin.cpp | 320 +++
.../src/blackberry10/native/public/plugin.h | 70 +
.../src/blackberry10/native/public/tokenizer.cpp | 222 ++
.../src/blackberry10/native/public/tokenizer.h | 55 +
.../src/blackberry10/native/simulator/echoJnext.so | Bin 0 -> 231778 bytes
.../src/blackberry10/native/src/echo.cpp | 121 +
.../src/blackberry10/native/src/echo.hpp | 45 +
spec/plugins/cordova.echo/src/device/echoJnext.so | Bin 1291818 -> 0 bytes
.../cordova.echo/src/simulator/echoJnext.so | Bin 231778 -> 0 bytes
spec/plugins/cordova.echo/www/client.js | 53 +
spec/projects/blackberry/www/config.xml | 97 -
spec/projects/blackberry/www/plugins.xml | 35 -
spec/projects/blackberry10/www/config.xml | 97 +
spec/uninstall.spec.js | 2 +-
src/install.js | 5 +
src/platforms.js | 2 +-
src/platforms/blackberry.js | 44 -
src/platforms/blackberry10.js | 71 +
72 files changed, 7899 insertions(+), 7846 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 833fb23..b5676ab 100644
--- a/README.md
+++ b/README.md
@@ -47,6 +47,7 @@ Note that `--fetch` deals with the local cache of the plugin's files (in the `--
- Google has a [https://github.com/MobileChromeApps/chrome-cordova/plugins](bunch of plugins) which are maintained actively by a contributor to plugman
- Adobe maintains plugins for its Build cloud service, which are open sourced and [available on GitHub](https://github.com/phonegap-build)
+- BlackBerry has a [https://github.com/blackberry/cordova-blackberry-plugins](bunch of plugins) offering deep platform integration
## Development
@@ -201,7 +202,7 @@ present, and then copy the file `new-foo.js` as `foo.js` into that directory.
If a file exists at the target location, plugman will stop/reverse the installation process and notify the user of the conflict, and exit with a non-zero code.
-### `<js-module>` element
+### <js-module> element
A typical plugin includes one or more JavaScript files. Rather than have the user of your plugin add `<script>` tags for your JavaScript to their HTML file(s) manually, you should use `<js-module>` tags for your Javascript files.
@@ -386,6 +387,26 @@ Examples:
<resource-file src="CDVFooViewController.xib" />
<header-file src="CDVFoo.h" />
+### <lib-file>
+
+Like source, resource and header files but specifically for platforms that use user generated libraries (BB10).
+
+Examples:
+
+ <lib-file src="src/BlackBerry10/native/device/libfoo.so" arch="device" />
+ <lib-file src="src/BlackBerry10/native/simulator/libfoo.so" arch="simulator" />
+
+
+#### src (required)
+
+Where the file is located, relative to the `plugin.xml` file.
+
+If `src` does not resolve to a file that can be found, plugman will stop/reverse the installation, notify the user of the problem and exit with a non-zero code.
+
+#### arch
+
+The architecture that the so file has been built for
+
### <framework>
Identifies a framework (usually part of the OS/platform) that the plugin depends on.
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/main.js
----------------------------------------------------------------------
diff --git a/main.js b/main.js
index 8339061..b60ab38 100755
--- a/main.js
+++ b/main.js
@@ -26,7 +26,7 @@ var path = require('path')
, plugins = require('./src/util/plugins')
, plugman = require('./plugman');
-var known_opts = { 'platform' : [ 'ios', 'android', 'blackberry', 'wp7', 'wp8' ]
+var known_opts = { 'platform' : [ 'ios', 'android', 'blackberry10', 'wp7', 'wp8' ]
, 'project' : path
, 'plugin' : [String, path, url]
, 'install' : Boolean
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/install.spec.js
----------------------------------------------------------------------
diff --git a/spec/install.spec.js b/spec/install.spec.js
index 34bc9e2..282b318 100644
--- a/spec/install.spec.js
+++ b/spec/install.spec.js
@@ -2,7 +2,7 @@ var install = require('../src/install'),
common = require('../src/platforms/common'),
actions = require('../src/util/action-stack'),
//ios = require('../src/platforms/ios'),
- //blackberry = require('../src/platforms/blackberry'),
+ //blackberry10 = require('../src/platforms/blackberry10'),
config_changes = require('../src/util/config-changes'),
plugman = require('../plugman'),
fs = require('fs'),
@@ -21,7 +21,7 @@ var install = require('../src/install'),
variableplugin = path.join(__dirname, 'plugins', 'VariablePlugin'),
faultyplugin = path.join(__dirname, 'plugins', 'FaultyPlugin'),
android_one_project = path.join(__dirname, 'projects', 'android_one', '*');
- //blackberry_project = path.join(__dirname, 'projects', 'blackberry', '*');
+ //blackberry10_project = path.join(__dirname, 'projects', 'blackberry10', '*');
//ios_project = path.join(__dirname, 'projects', 'ios-config-xml', '*');
plugins_dir = path.join(temp, 'cordova', 'plugins');
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/platforms/blackberry.spec.js
----------------------------------------------------------------------
diff --git a/spec/platforms/blackberry.spec.js b/spec/platforms/blackberry.spec.js
deleted file mode 100644
index 9040b6f..0000000
--- a/spec/platforms/blackberry.spec.js
+++ /dev/null
@@ -1,117 +0,0 @@
-var blackberry = require('../../src/platforms/blackberry'),
- common = require('../../src/platforms/common'),
- install = require('../../src/install'),
- path = require('path'),
- fs = require('fs'),
- shell = require('shelljs'),
- et = require('elementtree'),
- os = require('osenv'),
- temp = path.join(os.tmpdir(), 'plugman'),
- plugins_dir = path.join(temp, 'cordova', 'plugins'),
- xml_helpers = require('../../src/util/xml-helpers'),
- plugins_module = require('../../src/util/plugins'),
- dummyplugin = path.join(__dirname, '..', 'plugins', 'DummyPlugin'),
- faultyplugin = path.join(__dirname, '..', 'plugins', 'FaultyPlugin'),
- blackberry_project = path.join(__dirname, '..', 'projects', 'blackberry', '*');
-
-var xml_path = path.join(dummyplugin, 'plugin.xml')
- , xml_text = fs.readFileSync(xml_path, 'utf-8')
- , plugin_et = new et.ElementTree(et.XML(xml_text));
-
-var platformTag = plugin_et.find('./platform[@name="blackberry"]');
-var dummy_id = plugin_et._root.attrib['id'];
-var valid_source = platformTag.findall('./source-file'),
- assets = plugin_et.findall('./asset'),
- configChanges = platformTag.findall('./config-file');
-
-xml_path = path.join(faultyplugin, 'plugin.xml')
-xml_text = fs.readFileSync(xml_path, 'utf-8')
-plugin_et = new et.ElementTree(et.XML(xml_text));
-
-platformTag = plugin_et.find('./platform[@name="blackberry"]');
-var invalid_source = platformTag.findall('./source-file');
-var faulty_id = plugin_et._root.attrib['id'];
-
-function copyArray(arr) {
- return Array.prototype.slice.call(arr, 0);
-}
-
-describe('blackberry project handler', function() {
- describe('www_dir method', function() {
- it('should return cordova-blackberry project www location using www_dir', function() {
- expect(blackberry.www_dir('/')).toEqual('/www');
- });
- });
- describe('package_name method', function() {
- it('should return the blackberry project package name based on what is in config.xml', function() {
- expect(blackberry.package_name(path.join(blackberry_project, '..'))).toEqual('cordovaExample');
- });
- });
-
- describe('installation', function() {
- beforeEach(function() {
- shell.mkdir('-p', temp);
- shell.cp('-rf', blackberry_project, temp);
- });
- afterEach(function() {
- shell.rm('-rf', temp);
- });
- describe('of <source-file> elements', function() {
- it('should copy stuff from one location to another by calling common.copyFile', function() {
- var source = copyArray(valid_source);
- var s = spyOn(common, 'copyFile');
- source.forEach(function(src) {
- blackberry['source-file'].install(src, dummyplugin, temp);
- });
- expect(s).toHaveBeenCalledWith(dummyplugin, 'src/blackberry/client.js', temp, 'ext-qnx/cordova.echo/client.js');
- expect(s).toHaveBeenCalledWith(dummyplugin, 'src/blackberry/index.js', temp, 'ext-qnx/cordova.echo/index.js');
- expect(s).toHaveBeenCalledWith(dummyplugin, 'src/blackberry/manifest.json', temp, 'ext-qnx/cordova.echo/manifest.json');
- });
- it('should throw if source file cannot be found', function() {
- var source = copyArray(invalid_source);
- expect(function() {
- blackberry['source-file'].install(source[1], faultyplugin, temp);
- }).toThrow('"' + path.resolve(faultyplugin, 'src/blackberry/device/echoJnext.so') + '" not found!');
- });
- it('should throw if target file already exists', function() {
- // write out a file
- var target = path.resolve(temp, 'ext-qnx/cordova.echo');
- shell.mkdir('-p', target);
- target = path.join(target, 'client.js');
- fs.writeFileSync(target, 'some bs', 'utf-8');
-
- var source = copyArray(valid_source);
- expect(function() {
- blackberry['source-file'].install(source[0], dummyplugin, temp);
- }).toThrow('"' + target + '" already exists!');
- });
- });
- });
-
- describe('uninstallation', function() {
- beforeEach(function() {
- shell.mkdir('-p', temp);
- shell.mkdir('-p', plugins_dir);
- shell.cp('-rf', blackberry_project, temp);
- shell.cp('-rf', dummyplugin, plugins_dir);
- });
- afterEach(function() {
- shell.rm('-rf', temp);
- });
- describe('of <source-file> elements', function() {
- it('should remove stuff by calling common.deleteJava', function(done) {
- var s = spyOn(common, 'deleteJava');
- install('blackberry', temp, 'DummyPlugin', plugins_dir, '.', {}, undefined, function() {
- var source = copyArray(valid_source);
- source.forEach(function(src) {
- blackberry['source-file'].uninstall(src, temp);
- });
- expect(s).toHaveBeenCalledWith(temp, 'ext-qnx/cordova.echo/client.js');
- expect(s).toHaveBeenCalledWith(temp, 'ext-qnx/cordova.echo/index.js');
- expect(s).toHaveBeenCalledWith(temp, 'ext-qnx/cordova.echo/manifest.json');
- done();
- });
- });
- });
- });
-});
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/platforms/blackberry10.spec.js
----------------------------------------------------------------------
diff --git a/spec/platforms/blackberry10.spec.js b/spec/platforms/blackberry10.spec.js
new file mode 100644
index 0000000..d0973e2
--- /dev/null
+++ b/spec/platforms/blackberry10.spec.js
@@ -0,0 +1,177 @@
+var blackberry10 = require('../../src/platforms/blackberry10'),
+ common = require('../../src/platforms/common'),
+ install = require('../../src/install'),
+ path = require('path'),
+ fs = require('fs'),
+ shell = require('shelljs'),
+ et = require('elementtree'),
+ os = require('osenv'),
+ temp = path.join(os.tmpdir(), 'plugman'),
+ plugins_dir = path.join(temp, 'cordova', 'plugins'),
+ xml_helpers = require('../../src/util/xml-helpers'),
+ plugins_module = require('../../src/util/plugins'),
+ blackberry10_project = path.join(__dirname, '..', 'projects', 'blackberry10', '*'),
+ plugins = {
+ dummy: parsePlugin(path.join(__dirname, '..', 'plugins', 'DummyPlugin')),
+ faulty: parsePlugin(path.join(__dirname, '..', 'plugins', 'FaultyPlugin')),
+ echo: parsePlugin(path.join(__dirname, '..', 'plugins', 'cordova.echo'))
+ };
+
+function copyArray(arr) {
+ return Array.prototype.slice.call(arr, 0);
+}
+
+function parsePlugin (pluginPath) {
+ var pluginXML = fs.readFileSync(path.join(pluginPath, "plugin.xml"), "utf-8"),
+ pluginEt = new et.ElementTree(et.XML(pluginXML)),
+ platformTag = pluginEt.find('./platform[@name="blackberry10"]');
+
+ return {
+ path: pluginPath,
+ id: pluginEt._root.attrib.id,
+ assets: pluginEt.findall('./asset'),
+ srcFiles: platformTag.findall('./source-file'),
+ configChanges: platformTag.findall('./config-file'),
+ libFiles: platformTag.findall('./lib-file')
+ };
+}
+
+
+describe('blackberry10 project handler', function() {
+ it('should have an install function', function() {
+ expect(typeof blackberry10.install).toEqual('function');
+ });
+ it('should have an uninstall function', function() {
+ expect(typeof blackberry10.uninstall).toEqual('function');
+ });
+ it('should return cordova-blackberry10 project www location using www_dir', function() {
+ expect(blackberry10.www_dir('/')).toEqual('/www');
+ });
+
+ describe('installation', function() {
+ beforeEach(function() {
+ shell.mkdir('-p', temp);
+ shell.cp('-rf', blackberry10_project, temp);
+ });
+ afterEach(function() {
+ shell.rm('-rf', temp);
+ });
+ describe('of <lib-file> elements', function() {
+ it("should copy so files to native/target/plugins", function () {
+ var plugin = plugins.echo,
+ source = copyArray(plugin.libFiles),
+ s = spyOn(common, 'copyFile');
+
+ blackberry10.install(source, plugin.id, temp, plugin.path, {});
+ expect(s).toHaveBeenCalledWith(plugin.path, 'src/blackberry10/native/device/echoJnext.so', temp, 'native/device/plugins/jnext/echoJnext.so');
+ expect(s).toHaveBeenCalledWith(plugin.path, 'src/blackberry10/native/simulator/echoJnext.so', temp, 'native/simulator/plugins/jnext/echoJnext.so');
+ });
+ });
+ describe('of <source-file> elements', function() {
+ it('should copy stuff from one location to another by calling common.copyFile', function() {
+ var plugin = plugins.echo,
+ source = copyArray(plugin.srcFiles);
+ s = spyOn(common, 'copyFile');
+
+ blackberry10.install(source, plugin.id, temp, plugin.path, {});
+ expect(s).toHaveBeenCalledWith(plugin.path, 'src/blackberry10/index.js', temp, 'native/device/chrome/plugin/cordova.echo/index.js');
+ expect(s).toHaveBeenCalledWith(plugin.path, 'src/blackberry10/index.js', temp, 'native/simulator/chrome/plugin/cordova.echo/index.js');
+ });
+ it('defaults to plugin id when dest is not present', function() {
+ var source = copyArray(plugins.dummy.srcFiles);
+ var s = spyOn(common, 'copyFile');
+ blackberry10.install(source, plugins.dummy.id, temp, plugins.dummy.path, {});
+ expect(s).toHaveBeenCalledWith(plugins.dummy.path, 'src/blackberry10/index.js', temp, 'native/device/chrome/plugin/' + plugins.dummy.id + '/index.js');
+ expect(s).toHaveBeenCalledWith(plugins.dummy.path, 'src/blackberry10/index.js', temp, 'native/simulator/chrome/plugin/' + plugins.dummy.id + '/index.js');
+ });
+ it('should throw if source file cannot be found', function() {
+ var source = copyArray(plugins.faulty.srcFiles);
+ expect(function() {
+ blackberry10.install(source, plugins.faulty.id, temp, plugins.faulty.path, {});
+ }).toThrow('"' + path.resolve(plugins.faulty.path, 'src/blackberry10/index.js') + '" not found!');
+ });
+ it('should throw if target file already exists', function() {
+ // write out a file
+ var target = path.resolve(temp, 'native/device/chrome/plugin/com.phonegap.plugins.dummyplugin');
+ shell.mkdir('-p', target);
+ target = path.join(target, 'index.js');
+ fs.writeFileSync(target, 'some bs', 'utf-8');
+
+ var source = copyArray(plugins.dummy.srcFiles);
+ expect(function() {
+ blackberry10.install(source, plugins.dummy.id, temp, plugins.dummy.path, {});
+ }).toThrow('"' + target + '" already exists!');
+ });
+ });
+ });
+
+ describe('uninstallation', function() {
+ beforeEach(function() {
+ shell.mkdir('-p', temp);
+ shell.cp('-rf', blackberry10_project, temp);
+ });
+ afterEach(function() {
+ shell.rm('-rf', temp);
+ });
+ describe('of <source-file> elements', function() {
+ it('should remove stuff by calling common.removeFile', function(done) {
+ var s = spyOn(common, 'removeFile'),
+ plugin = plugins.echo;
+ install('blackberry10', temp, plugin.path, plugins_dir, {}, "", function() {
+ var source = copyArray(plugin.srcFiles);
+ blackberry10.uninstall(source, plugin.id, temp, plugin.path);
+ expect(s).toHaveBeenCalledWith(temp, 'native/device/chrome/plugin/cordova.echo/index.js');
+ expect(s).toHaveBeenCalledWith(temp, 'native/simulator/chrome/plugin/cordova.echo/index.js');
+ done();
+ });
+ });
+ it('should remove stuff by calling common.removeFile', function(done) {
+ var s = spyOn(common, 'removeFile'),
+ plugin = plugins.dummy;
+ install('blackberry10', temp, plugin.path, plugins_dir, {}, "", function() {
+ var source = copyArray(plugin.srcFiles);
+ blackberry10.uninstall(source, plugin.id, temp, plugin.path);
+ expect(s).toHaveBeenCalledWith(temp, 'native/device/chrome/plugin/' + plugin.id + '/index.js');
+ expect(s).toHaveBeenCalledWith(temp, 'native/simulator/chrome/plugin/' + plugin.id + '/index.js');
+ done();
+ });
+ });
+ });
+ describe('of <lib-file> elements', function(done) {
+ it("should remove so files from www/plugins", function (done) {
+ var s = spyOn(common, 'removeFile'),
+ plugin = plugins.echo;
+ install('blackberry10', temp, plugin.path, plugins_dir, {}, "", function() {
+ var source = copyArray(plugin.libFiles);
+ blackberry10.uninstall(source, plugin.id, temp, plugin.path);
+ expect(s).toHaveBeenCalledWith(temp, 'native/device/plugins/jnext/echoJnext.so');
+ expect(s).toHaveBeenCalledWith(temp, 'native/simulator/plugins/jnext/echoJnext.so');
+ done();
+ });
+ });
+ });
+ describe('of <asset> elements', function() {
+ it('should remove www\'s plugins/<plugin-id> directory', function(done) {
+ var plugin = plugins.dummy,
+ as = copyArray(plugin.assets);
+ install('blackberry10', temp, plugin.path, plugins_dir, {}, "", function() {
+ var s = spyOn(shell, 'rm');
+ blackberry10.uninstall(as, plugin.id, temp, plugin.path);
+ expect(s).toHaveBeenCalledWith('-Rf', path.join(temp, 'www', 'plugins', plugin.id));
+ done();
+ });
+ });
+ it('should remove stuff specified by the element', function(done) {
+ var plugin = plugins.dummy,
+ as = copyArray(plugin.assets);
+ install('blackberry10', temp, plugin.path, plugins_dir, {}, "", function() {
+ var s = spyOn(shell, 'rm');
+ blackberry10.uninstall(as, plugin.id, temp, plugin.path);
+ expect(s).toHaveBeenCalledWith('-Rf', path.join(temp, 'www', 'dummyplugin.js'));
+ expect(s).toHaveBeenCalledWith('-Rf', path.join(temp, 'www', 'dummyplugin'));
+ done();
+ });
+ });
+ });
+ });
+});
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/DummyPlugin/plugin.xml
----------------------------------------------------------------------
diff --git a/spec/plugins/DummyPlugin/plugin.xml b/spec/plugins/DummyPlugin/plugin.xml
index 44e18f1..59efe3c 100644
--- a/spec/plugins/DummyPlugin/plugin.xml
+++ b/spec/plugins/DummyPlugin/plugin.xml
@@ -59,15 +59,13 @@
target-dir="src/com/phonegap/plugins/dummyplugin" />
</platform>
- <!-- blackberry -->
- <platform name="blackberry">
+ <!-- blackberry10 -->
+ <platform name="blackberry10">
<config-file target="www/config.xml" parent="/widget">
<feature id="dummyPlugin" required="true" version="1.0.0.0"/>
</config-file>
- <source-file src="src/blackberry/client.js" target-dir="ext-qnx/cordova.echo" />
- <source-file src="src/blackberry/index.js" target-dir="ext-qnx/cordova.echo" />
- <source-file src="src/blackberry/manifest.json" target-dir="ext-qnx/cordova.echo" />
+ <source-file src="src/blackberry10/index.js"/>
<js-module src="www/dummyplugin.js" name="Dummy">
<clobbers target="dummy" />
</js-module>
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/DummyPlugin/src/blackberry/client.js
----------------------------------------------------------------------
diff --git a/spec/plugins/DummyPlugin/src/blackberry/client.js b/spec/plugins/DummyPlugin/src/blackberry/client.js
deleted file mode 100644
index 5263b0c..0000000
--- a/spec/plugins/DummyPlugin/src/blackberry/client.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- *
- * Copyright 2013 Anis Kadri
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/DummyPlugin/src/blackberry/index.js
----------------------------------------------------------------------
diff --git a/spec/plugins/DummyPlugin/src/blackberry/index.js b/spec/plugins/DummyPlugin/src/blackberry/index.js
deleted file mode 100644
index 5263b0c..0000000
--- a/spec/plugins/DummyPlugin/src/blackberry/index.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- *
- * Copyright 2013 Anis Kadri
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/DummyPlugin/src/blackberry/manifest.json
----------------------------------------------------------------------
diff --git a/spec/plugins/DummyPlugin/src/blackberry/manifest.json b/spec/plugins/DummyPlugin/src/blackberry/manifest.json
deleted file mode 100644
index e69de29..0000000
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/DummyPlugin/src/blackberry10/index.js
----------------------------------------------------------------------
diff --git a/spec/plugins/DummyPlugin/src/blackberry10/index.js b/spec/plugins/DummyPlugin/src/blackberry10/index.js
new file mode 100644
index 0000000..5263b0c
--- /dev/null
+++ b/spec/plugins/DummyPlugin/src/blackberry10/index.js
@@ -0,0 +1,19 @@
+/*
+ *
+ * Copyright 2013 Anis Kadri
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/FaultyPlugin/plugin.xml
----------------------------------------------------------------------
diff --git a/spec/plugins/FaultyPlugin/plugin.xml b/spec/plugins/FaultyPlugin/plugin.xml
index 4909123..d03f90e 100644
--- a/spec/plugins/FaultyPlugin/plugin.xml
+++ b/spec/plugins/FaultyPlugin/plugin.xml
@@ -33,7 +33,7 @@
<asset src="www/main.js" target="faultyplugin/main.js" />
<asset src="www/index.js" target="faultyplugin/index.js" />
</config-file>
-
+
<!-- android -->
<platform name="android">
<config-file target="AndroidManifest.xml" parent="/manifest/application">
@@ -78,14 +78,14 @@
<resource-file src="src/ios/IDontExist.bundle" />
<framework src="src/ios/Nopers.lib" />
</platform>
- <platform name="blackberry">
+ <platform name="blackberry10">
<config-file target="config.xml" parent="/widget">
<feature id="cordova.echo" required="true" version="1.0.0.0"/>
</config-file>
- <source-file src="src/blackberry/client.js" target-dir="ext-qnx/cordova.echo" />
+ <source-file src="src/blackberry10/index.js" target-dir="ext-qnx/cordova.echo" />
<!-- these dont exist -->
- <source-file src="src/blackberry/device/echoJnext.so" target-dir="ext-qnx/cordova.echo/device" />
- <source-file src="src/blackberry/simulator/echoJnext.so" target-dir="ext-qnx/cordova.echo/simulator" />
+ <lib-file src="src/blackberry10/device/echoJnext.so" target-dir="ext-qnx/cordova.echo/device" />
+ <lib-file src="src/blackberry10/simulator/echoJnext.so" target-dir="ext-qnx/cordova.echo/simulator" />
</platform>
</plugin>
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/FaultyPlugin/src/blackberry/client.js
----------------------------------------------------------------------
diff --git a/spec/plugins/FaultyPlugin/src/blackberry/client.js b/spec/plugins/FaultyPlugin/src/blackberry/client.js
deleted file mode 100644
index e69de29..0000000
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/FaultyPlugin/src/blackberry10/client.js
----------------------------------------------------------------------
diff --git a/spec/plugins/FaultyPlugin/src/blackberry10/client.js b/spec/plugins/FaultyPlugin/src/blackberry10/client.js
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/plugin.xml
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/plugin.xml b/spec/plugins/cordova.echo/plugin.xml
index dde71bf..28c81c2 100644
--- a/spec/plugins/cordova.echo/plugin.xml
+++ b/spec/plugins/cordova.echo/plugin.xml
@@ -2,22 +2,23 @@
<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
id="com.cordova.echo"
version="1.0.0">
-
+
<engines>
<engine name="cordova" version=">=2.3.0" />
</engines>
-
+
<name>cordova echo</name>
-
- <platform name="blackberry">
+
+ <js-module src="www/client.js">
+ <clobbers target="cordova.echo"/>
+ </js-module>
+
+ <platform name="blackberry10">
+ <source-file src="src/blackberry10/index.js" target-dir="cordova.echo"/>
+ <lib-file src="src/blackberry10/native/device/echoJnext.so" arch="device"/>
+ <lib-file src="src/blackberry10/native/simulator/echoJnext.so" arch="simulator"/>
<config-file target="config.xml" parent="/widget">
<feature id="cordova.echo" required="true" version="1.0.0.0"/>
</config-file>
-
- <source-file src="src/blackberry/client.js" target-dir="ext-qnx/cordova.echo" />
- <source-file src="src/blackberry/index.js" target-dir="ext-qnx/cordova.echo" />
- <source-file src="src/blackberry/manifest.json" target-dir="ext-qnx/cordova.echo" />
- <source-file src="src/blackberry/device/echoJnext.so" target-dir="ext-qnx/cordova.echo/device" />
- <source-file src="src/blackberry/simulator/echoJnext.so" target-dir="ext-qnx/cordova.echo/simulator" />
</platform>
</plugin>
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/client.js
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/client.js b/spec/plugins/cordova.echo/src/blackberry/client.js
deleted file mode 100644
index 4e7a1b3..0000000
--- a/spec/plugins/cordova.echo/src/blackberry/client.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var _self = {},
- _ID = require("./manifest.json").namespace,
- win = null,
- fail = null;
-
-function handleCallback(result) {
- if (result) {
- if(win){
- win(result);
- }
- } else {
- if(fail){
- fail(result);
- }
- }
- win = null;
- fail = null;
-}
-
-_self.doEcho = function (args, theWin, theFail) {
- var data = { "message" : args.message || "" };
-
- win = theWin;
- fail = theFail;
-
- window.webworks.event.add(_ID, "echoCallback", handleCallback);
-
- return window.webworks.execSync(_ID, "doEcho", data);
-};
-
-
-module.exports = _self;
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/device/echoJnext.so
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/device/echoJnext.so b/spec/plugins/cordova.echo/src/blackberry/device/echoJnext.so
deleted file mode 100755
index 169714a..0000000
Binary files a/spec/plugins/cordova.echo/src/blackberry/device/echoJnext.so and /dev/null differ
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/index.js
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/index.js b/spec/plugins/cordova.echo/src/blackberry/index.js
deleted file mode 100644
index 0759a20..0000000
--- a/spec/plugins/cordova.echo/src/blackberry/index.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var echoJNext,
- _event = require("../../lib/event"),
- winCallback = null,
- failCallback = null;
-
-module.exports = {
- doEcho: function (success, fail, args) {
- var invokeData = { "message" : JSON.parse(decodeURIComponent(args.message)) };
- try {
- success(echoJNext.getEchoJNext(invokeData));
- } catch (e) {
- fail(-1, e);
- }
- }
-};
-
-///////////////////////////////////////////////////////////////////
-// JavaScript wrapper for JNEXT plugin
-///////////////////////////////////////////////////////////////////
-
-JNEXT.EchoJNext = function ()
-{
- var _self = this;
-
- _self.getEchoJNext = function (args) {
- return JNEXT.invoke(_self._id, "doEcho " + JSON.stringify(args));
- };
-
- _self.getId = function () {
- return _self._id;
- };
-
- _self.init = function () {
- if (!JNEXT.require("echoJnext")) {
- return false;
- }
-
- _self._id = JNEXT.createObject("echoJnext.Echo");
-
- if (!_self._id || _self._id === "") {
- return false;
- }
-
- JNEXT.registerEvents(_self);
- };
-
- _self.onEvent = function (strData) {
- var arData = strData.split(" "),
- strEventId = arData[0],
- args = arData[1],
- info = {};
-
- if (strEventId === "cordova.echo.callback") {
- _event.trigger("echoCallback", args);
- }
-
- };
-
- _self._id = "";
-
- _self.init();
-};
-
-echoJNext = new JNEXT.EchoJNext();
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/manifest.json
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/manifest.json b/spec/plugins/cordova.echo/src/blackberry/manifest.json
deleted file mode 100644
index d14e79e..0000000
--- a/spec/plugins/cordova.echo/src/blackberry/manifest.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "global": false,
- "namespace": "cordova.echo",
- "dependencies": []
-}
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/public/json/autolink.h
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/public/json/autolink.h b/spec/plugins/cordova.echo/src/blackberry/public/json/autolink.h
deleted file mode 100644
index 37c9258..0000000
--- a/spec/plugins/cordova.echo/src/blackberry/public/json/autolink.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef JSON_AUTOLINK_H_INCLUDED
-# define JSON_AUTOLINK_H_INCLUDED
-
-# include "config.h"
-
-# ifdef JSON_IN_CPPTL
-# include <cpptl/cpptl_autolink.h>
-# endif
-
-# if !defined(JSON_NO_AUTOLINK) && !defined(JSON_DLL_BUILD) && !defined(JSON_IN_CPPTL)
-# define CPPTL_AUTOLINK_NAME "json"
-# undef CPPTL_AUTOLINK_DLL
-# ifdef JSON_DLL
-# define CPPTL_AUTOLINK_DLL
-# endif
-# include "autolink.h"
-# endif
-
-#endif // JSON_AUTOLINK_H_INCLUDED
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/public/json/config.h
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/public/json/config.h b/spec/plugins/cordova.echo/src/blackberry/public/json/config.h
deleted file mode 100644
index 5d334cb..0000000
--- a/spec/plugins/cordova.echo/src/blackberry/public/json/config.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef JSON_CONFIG_H_INCLUDED
-# define JSON_CONFIG_H_INCLUDED
-
-/// If defined, indicates that json library is embedded in CppTL library.
-//# define JSON_IN_CPPTL 1
-
-/// If defined, indicates that json may leverage CppTL library
-//# define JSON_USE_CPPTL 1
-/// If defined, indicates that cpptl vector based map should be used instead of std::map
-/// as Value container.
-//# define JSON_USE_CPPTL_SMALLMAP 1
-/// If defined, indicates that Json specific container should be used
-/// (hash table & simple deque container with customizable allocator).
-/// THIS FEATURE IS STILL EXPERIMENTAL!
-//# define JSON_VALUE_USE_INTERNAL_MAP 1
-/// Force usage of standard new/malloc based allocator instead of memory pool based allocator.
-/// The memory pools allocator used optimization (initializing Value and ValueInternalLink
-/// as if it was a POD) that may cause some validation tool to report errors.
-/// Only has effects if JSON_VALUE_USE_INTERNAL_MAP is defined.
-//# define JSON_USE_SIMPLE_INTERNAL_ALLOCATOR 1
-
-/// If defined, indicates that Json use exception to report invalid type manipulation
-/// instead of C assert macro.
-# define JSON_USE_EXCEPTION 1
-
-# ifdef JSON_IN_CPPTL
-# include <cpptl/config.h>
-# ifndef JSON_USE_CPPTL
-# define JSON_USE_CPPTL 1
-# endif
-# endif
-
-# ifdef JSON_IN_CPPTL
-# define JSON_API CPPTL_API
-# elif defined(JSON_DLL_BUILD)
-# define JSON_API __declspec(dllexport)
-# elif defined(JSON_DLL)
-# define JSON_API __declspec(dllimport)
-# else
-# define JSON_API
-# endif
-
-#endif // JSON_CONFIG_H_INCLUDED
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/public/json/features.h
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/public/json/features.h b/spec/plugins/cordova.echo/src/blackberry/public/json/features.h
deleted file mode 100644
index 5a9adec..0000000
--- a/spec/plugins/cordova.echo/src/blackberry/public/json/features.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef CPPTL_JSON_FEATURES_H_INCLUDED
-# define CPPTL_JSON_FEATURES_H_INCLUDED
-
-# include "forwards.h"
-
-namespace Json {
-
- /** \brief Configuration passed to reader and writer.
- * This configuration object can be used to force the Reader or Writer
- * to behave in a standard conforming way.
- */
- class JSON_API Features
- {
- public:
- /** \brief A configuration that allows all features and assumes all strings are UTF-8.
- * - C & C++ comments are allowed
- * - Root object can be any JSON value
- * - Assumes Value strings are encoded in UTF-8
- */
- static Features all();
-
- /** \brief A configuration that is strictly compatible with the JSON specification.
- * - Comments are forbidden.
- * - Root object must be either an array or an object value.
- * - Assumes Value strings are encoded in UTF-8
- */
- static Features strictMode();
-
- /** \brief Initialize the configuration like JsonConfig::allFeatures;
- */
- Features();
-
- /// \c true if comments are allowed. Default: \c true.
- bool allowComments_;
-
- /// \c true if root must be either an array or an object value. Default: \c false.
- bool strictRoot_;
- };
-
-} // namespace Json
-
-#endif // CPPTL_JSON_FEATURES_H_INCLUDED
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/public/json/forwards.h
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/public/json/forwards.h b/spec/plugins/cordova.echo/src/blackberry/public/json/forwards.h
deleted file mode 100644
index d0ce830..0000000
--- a/spec/plugins/cordova.echo/src/blackberry/public/json/forwards.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef JSON_FORWARDS_H_INCLUDED
-# define JSON_FORWARDS_H_INCLUDED
-
-# include "config.h"
-
-namespace Json {
-
- // writer.h
- class FastWriter;
- class StyledWriter;
-
- // reader.h
- class Reader;
-
- // features.h
- class Features;
-
- // value.h
- typedef int Int;
- typedef unsigned int UInt;
- class StaticString;
- class Path;
- class PathArgument;
- class Value;
- class ValueIteratorBase;
- class ValueIterator;
- class ValueConstIterator;
-#ifdef JSON_VALUE_USE_INTERNAL_MAP
- class ValueAllocator;
- class ValueMapAllocator;
- class ValueInternalLink;
- class ValueInternalArray;
- class ValueInternalMap;
-#endif // #ifdef JSON_VALUE_USE_INTERNAL_MAP
-
-} // namespace Json
-
-
-#endif // JSON_FORWARDS_H_INCLUDED
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/public/json/json.h
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/public/json/json.h b/spec/plugins/cordova.echo/src/blackberry/public/json/json.h
deleted file mode 100644
index c71ed65..0000000
--- a/spec/plugins/cordova.echo/src/blackberry/public/json/json.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef JSON_JSON_H_INCLUDED
-# define JSON_JSON_H_INCLUDED
-
-# include "autolink.h"
-# include "value.h"
-# include "reader.h"
-# include "writer.h"
-# include "features.h"
-
-#endif // JSON_JSON_H_INCLUDED
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/public/json/reader.h
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/public/json/reader.h b/spec/plugins/cordova.echo/src/blackberry/public/json/reader.h
deleted file mode 100644
index ee1d6a2..0000000
--- a/spec/plugins/cordova.echo/src/blackberry/public/json/reader.h
+++ /dev/null
@@ -1,196 +0,0 @@
-#ifndef CPPTL_JSON_READER_H_INCLUDED
-# define CPPTL_JSON_READER_H_INCLUDED
-
-# include "features.h"
-# include "value.h"
-# include <deque>
-# include <stack>
-# include <string>
-# include <iostream>
-
-namespace Json {
-
- /** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a Value.
- *
- */
- class JSON_API Reader
- {
- public:
- typedef char Char;
- typedef const Char *Location;
-
- /** \brief Constructs a Reader allowing all features
- * for parsing.
- */
- Reader();
-
- /** \brief Constructs a Reader allowing the specified feature set
- * for parsing.
- */
- Reader( const Features &features );
-
- /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> document.
- * \param document UTF-8 encoded string containing the document to read.
- * \param root [out] Contains the root value of the document if it was
- * successfully parsed.
- * \param collectComments \c true to collect comment and allow writing them back during
- * serialization, \c false to discard comments.
- * This parameter is ignored if Features::allowComments_
- * is \c false.
- * \return \c true if the document was successfully parsed, \c false if an error occurred.
- */
- bool parse( const std::string &document,
- Value &root,
- bool collectComments = true );
-
- /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> document.
- * \param document UTF-8 encoded string containing the document to read.
- * \param root [out] Contains the root value of the document if it was
- * successfully parsed.
- * \param collectComments \c true to collect comment and allow writing them back during
- * serialization, \c false to discard comments.
- * This parameter is ignored if Features::allowComments_
- * is \c false.
- * \return \c true if the document was successfully parsed, \c false if an error occurred.
- */
- bool parse( const char *beginDoc, const char *endDoc,
- Value &root,
- bool collectComments = true );
-
- /// \brief Parse from input stream.
- /// \see Json::operator>>(std::istream&, Json::Value&).
- bool parse( std::istream &is,
- Value &root,
- bool collectComments = true );
-
- /** \brief Returns a user friendly string that list errors in the parsed document.
- * \return Formatted error message with the list of errors with their location in
- * the parsed document. An empty string is returned if no error occurred
- * during parsing.
- */
- std::string getFormatedErrorMessages() const;
-
- private:
- enum TokenType
- {
- tokenEndOfStream = 0,
- tokenObjectBegin,
- tokenObjectEnd,
- tokenArrayBegin,
- tokenArrayEnd,
- tokenString,
- tokenNumber,
- tokenTrue,
- tokenFalse,
- tokenNull,
- tokenArraySeparator,
- tokenMemberSeparator,
- tokenComment,
- tokenError
- };
-
- class Token
- {
- public:
- TokenType type_;
- Location start_;
- Location end_;
- };
-
- class ErrorInfo
- {
- public:
- Token token_;
- std::string message_;
- Location extra_;
- };
-
- typedef std::deque<ErrorInfo> Errors;
-
- bool expectToken( TokenType type, Token &token, const char *message );
- bool readToken( Token &token );
- void skipSpaces();
- bool match( Location pattern,
- int patternLength );
- bool readComment();
- bool readCStyleComment();
- bool readCppStyleComment();
- bool readString();
- void readNumber();
- bool readValue();
- bool readObject( Token &token );
- bool readArray( Token &token );
- bool decodeNumber( Token &token );
- bool decodeString( Token &token );
- bool decodeString( Token &token, std::string &decoded );
- bool decodeDouble( Token &token );
- bool decodeUnicodeCodePoint( Token &token,
- Location ¤t,
- Location end,
- unsigned int &unicode );
- bool decodeUnicodeEscapeSequence( Token &token,
- Location ¤t,
- Location end,
- unsigned int &unicode );
- bool addError( const std::string &message,
- Token &token,
- Location extra = 0 );
- bool recoverFromError( TokenType skipUntilToken );
- bool addErrorAndRecover( const std::string &message,
- Token &token,
- TokenType skipUntilToken );
- void skipUntilSpace();
- Value ¤tValue();
- Char getNextChar();
- void getLocationLineAndColumn( Location location,
- int &line,
- int &column ) const;
- std::string getLocationLineAndColumn( Location location ) const;
- void addComment( Location begin,
- Location end,
- CommentPlacement placement );
- void skipCommentTokens( Token &token );
-
- typedef std::stack<Value *> Nodes;
- Nodes nodes_;
- Errors errors_;
- std::string document_;
- Location begin_;
- Location end_;
- Location current_;
- Location lastValueEnd_;
- Value *lastValue_;
- std::string commentsBefore_;
- Features features_;
- bool collectComments_;
- };
-
- /** \brief Read from 'sin' into 'root'.
-
- Always keep comments from the input JSON.
-
- This can be used to read a file into a particular sub-object.
- For example:
- \code
- Json::Value root;
- cin >> root["dir"]["file"];
- cout << root;
- \endcode
- Result:
- \verbatim
- {
- "dir": {
- "file": {
- // The input stream JSON would be nested here.
- }
- }
- }
- \endverbatim
- \throw std::exception on parse error.
- \see Json::operator<<()
- */
- std::istream& operator>>( std::istream&, Value& );
-
-} // namespace Json
-
-#endif // CPPTL_JSON_READER_H_INCLUDED
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/759bce2b/spec/plugins/cordova.echo/src/blackberry/public/json/value.h
----------------------------------------------------------------------
diff --git a/spec/plugins/cordova.echo/src/blackberry/public/json/value.h b/spec/plugins/cordova.echo/src/blackberry/public/json/value.h
deleted file mode 100644
index 58bfd88..0000000
--- a/spec/plugins/cordova.echo/src/blackberry/public/json/value.h
+++ /dev/null
@@ -1,1069 +0,0 @@
-#ifndef CPPTL_JSON_H_INCLUDED
-# define CPPTL_JSON_H_INCLUDED
-
-# include "forwards.h"
-# include <string>
-# include <vector>
-
-# ifndef JSON_USE_CPPTL_SMALLMAP
-# include <map>
-# else
-# include <cpptl/smallmap.h>
-# endif
-# ifdef JSON_USE_CPPTL
-# include <cpptl/forwards.h>
-# endif
-
-/** \brief JSON (JavaScript Object Notation).
- */
-namespace Json {
-
- /** \brief Type of the value held by a Value object.
- */
- enum ValueType
- {
- nullValue = 0, ///< 'null' value
- intValue, ///< signed integer value
- uintValue, ///< unsigned integer value
- realValue, ///< double value
- stringValue, ///< UTF-8 string value
- booleanValue, ///< bool value
- arrayValue, ///< array value (ordered list)
- objectValue ///< object value (collection of name/value pairs).
- };
-
- enum CommentPlacement
- {
- commentBefore = 0, ///< a comment placed on the line before a value
- commentAfterOnSameLine, ///< a comment just after a value on the same line
- commentAfter, ///< a comment on the line after a value (only make sense for root value)
- numberOfCommentPlacement
- };
-
-//# ifdef JSON_USE_CPPTL
-// typedef CppTL::AnyEnumerator<const char *> EnumMemberNames;
-// typedef CppTL::AnyEnumerator<const Value &> EnumValues;
-//# endif
-
- /** \brief Lightweight wrapper to tag static string.
- *
- * Value constructor and objectValue member assignement takes advantage of the
- * StaticString and avoid the cost of string duplication when storing the
- * string or the member name.
- *
- * Example of usage:
- * \code
- * Json::Value aValue( StaticString("some text") );
- * Json::Value object;
- * static const StaticString code("code");
- * object[code] = 1234;
- * \endcode
- */
- class JSON_API StaticString
- {
- public:
- explicit StaticString( const char *czstring )
- : str_( czstring )
- {
- }
-
- operator const char *() const
- {
- return str_;
- }
-
- const char *c_str() const
- {
- return str_;
- }
-
- private:
- const char *str_;
- };
-
- /** \brief Represents a <a HREF="http://www.json.org">JSON</a> value.
- *
- * This class is a discriminated union wrapper that can represents a:
- * - signed integer [range: Value::minInt - Value::maxInt]
- * - unsigned integer (range: 0 - Value::maxUInt)
- * - double
- * - UTF-8 string
- * - boolean
- * - 'null'
- * - an ordered list of Value
- * - collection of name/value pairs (javascript object)
- *
- * The type of the held value is represented by a #ValueType and
- * can be obtained using type().
- *
- * values of an #objectValue or #arrayValue can be accessed using operator[]() methods.
- * Non const methods will automatically create the a #nullValue element
- * if it does not exist.
- * The sequence of an #arrayValue will be automatically resize and initialized
- * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue.
- *
- * The get() methods can be used to obtanis default value in the case the required element
- * does not exist.
- *
- * It is possible to iterate over the list of a #objectValue values using
- * the getMemberNames() method.
- */
- class JSON_API Value
- {
- friend class ValueIteratorBase;
-# ifdef JSON_VALUE_USE_INTERNAL_MAP
- friend class ValueInternalLink;
- friend class ValueInternalMap;
-# endif
- public:
- typedef std::vector<std::string> Members;
- typedef ValueIterator iterator;
- typedef ValueConstIterator const_iterator;
- typedef Json::UInt UInt;
- typedef Json::Int Int;
- typedef UInt ArrayIndex;
-
- static const Value null;
- static const Int minInt;
- static const Int maxInt;
- static const UInt maxUInt;
-
- private:
-#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
-# ifndef JSON_VALUE_USE_INTERNAL_MAP
- class CZString
- {
- public:
- enum DuplicationPolicy
- {
- noDuplication = 0,
- duplicate,
- duplicateOnCopy
- };
- CZString( int index );
- CZString( const char *cstr, DuplicationPolicy allocate );
- CZString( const CZString &other );
- ~CZString();
- CZString &operator =( const CZString &other );
- bool operator<( const CZString &other ) const;
- bool operator==( const CZString &other ) const;
- int index() const;
- const char *c_str() const;
- bool isStaticString() const;
- private:
- void swap( CZString &other );
- const char *cstr_;
- int index_;
- };
-
- public:
-# ifndef JSON_USE_CPPTL_SMALLMAP
- typedef std::map<CZString, Value> ObjectValues;
-# else
- typedef CppTL::SmallMap<CZString, Value> ObjectValues;
-# endif // ifndef JSON_USE_CPPTL_SMALLMAP
-# endif // ifndef JSON_VALUE_USE_INTERNAL_MAP
-#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
-
- public:
- /** \brief Create a default Value of the given type.
-
- This is a very useful constructor.
- To create an empty array, pass arrayValue.
- To create an empty object, pass objectValue.
- Another Value can then be set to this one by assignment.
- This is useful since clear() and resize() will not alter types.
-
- Examples:
- \code
- Json::Value null_value; // null
- Json::Value arr_value(Json::arrayValue); // []
- Json::Value obj_value(Json::objectValue); // {}
- \endcode
- */
- Value( ValueType type = nullValue );
- Value( Int value );
- Value( UInt value );
- Value( double value );
- Value( const char *value );
- Value( const char *beginValue, const char *endValue );
- /** \brief Constructs a value from a static string.
-
- * Like other value string constructor but do not duplicate the string for
- * internal storage. The given string must remain alive after the call to this
- * constructor.
- * Example of usage:
- * \code
- * Json::Value aValue( StaticString("some text") );
- * \endcode
- */
- Value( const StaticString &value );
- Value( const std::string &value );
-# ifdef JSON_USE_CPPTL
- Value( const CppTL::ConstString &value );
-# endif
- Value( bool value );
- Value( const Value &other );
- ~Value();
-
- Value &operator=( const Value &other );
- /// Swap values.
- /// \note Currently, comments are intentionally not swapped, for
- /// both logic and efficiency.
- void swap( Value &other );
-
- ValueType type() const;
-
- bool operator <( const Value &other ) const;
- bool operator <=( const Value &other ) const;
- bool operator >=( const Value &other ) const;
- bool operator >( const Value &other ) const;
-
- bool operator ==( const Value &other ) const;
- bool operator !=( const Value &other ) const;
-
- int compare( const Value &other );
-
- const char *asCString() const;
- std::string asString() const;
-# ifdef JSON_USE_CPPTL
- CppTL::ConstString asConstString() const;
-# endif
- Int asInt() const;
- UInt asUInt() const;
- double asDouble() const;
- bool asBool() const;
-
- bool isNull() const;
- bool isBool() const;
- bool isInt() const;
- bool isUInt() const;
- bool isIntegral() const;
- bool isDouble() const;
- bool isNumeric() const;
- bool isString() const;
- bool isArray() const;
- bool isObject() const;
-
- bool isConvertibleTo( ValueType other ) const;
-
- /// Number of values in array or object
- UInt size() const;
-
- /// \brief Return true if empty array, empty object, or null;
- /// otherwise, false.
- bool empty() const;
-
- /// Return isNull()
- bool operator!() const;
-
- /// Remove all object members and array elements.
- /// \pre type() is arrayValue, objectValue, or nullValue
- /// \post type() is unchanged
- void clear();
-
- /// Resize the array to size elements.
- /// New elements are initialized to null.
- /// May only be called on nullValue or arrayValue.
- /// \pre type() is arrayValue or nullValue
- /// \post type() is arrayValue
- void resize( UInt size );
-
- /// Access an array element (zero based index ).
- /// If the array contains less than index element, then null value are inserted
- /// in the array so that its size is index+1.
- /// (You may need to say 'value[0u]' to get your compiler to distinguish
- /// this from the operator[] which takes a string.)
- Value &operator[]( UInt index );
- /// Access an array element (zero based index )
- /// (You may need to say 'value[0u]' to get your compiler to distinguish
- /// this from the operator[] which takes a string.)
- const Value &operator[]( UInt index ) const;
- /// If the array contains at least index+1 elements, returns the element value,
- /// otherwise returns defaultValue.
- Value get( UInt index,
- const Value &defaultValue ) const;
- /// Return true if index < size().
- bool isValidIndex( UInt index ) const;
- /// \brief Append value to array at the end.
- ///
- /// Equivalent to jsonvalue[jsonvalue.size()] = value;
- Value &append( const Value &value );
-
- /// Access an object value by name, create a null member if it does not exist.
- Value &operator[]( const char *key );
- /// Access an object value by name, returns null if there is no member with that name.
- const Value &operator[]( const char *key ) const;
- /// Access an object value by name, create a null member if it does not exist.
- Value &operator[]( const std::string &key );
- /// Access an object value by name, returns null if there is no member with that name.
- const Value &operator[]( const std::string &key ) const;
- /** \brief Access an object value by name, create a null member if it does not exist.
-
- * If the object as no entry for that name, then the member name used to store
- * the new entry is not duplicated.
- * Example of use:
- * \code
- * Json::Value object;
- * static const StaticString code("code");
- * object[code] = 1234;
- * \endcode
- */
- Value &operator[]( const StaticString &key );
-# ifdef JSON_USE_CPPTL
- /// Access an object value by name, create a null member if it does not exist.
- Value &operator[]( const CppTL::ConstString &key );
- /// Access an object value by name, returns null if there is no member with that name.
- const Value &operator[]( const CppTL::ConstString &key ) const;
-# endif
- /// Return the member named key if it exist, defaultValue otherwise.
- Value get( const char *key,
- const Value &defaultValue ) const;
- /// Return the member named key if it exist, defaultValue otherwise.
- Value get( const std::string &key,
- const Value &defaultValue ) const;
-# ifdef JSON_USE_CPPTL
- /// Return the member named key if it exist, defaultValue otherwise.
- Value get( const CppTL::ConstString &key,
- const Value &defaultValue ) const;
-# endif
- /// \brief Remove and return the named member.
- ///
- /// Do nothing if it did not exist.
- /// \return the removed Value, or null.
- /// \pre type() is objectValue or nullValue
- /// \post type() is unchanged
- Value removeMember( const char* key );
- /// Same as removeMember(const char*)
- Value removeMember( const std::string &key );
-
- /// Return true if the object has a member named key.
- bool isMember( const char *key ) const;
- /// Return true if the object has a member named key.
- bool isMember( const std::string &key ) const;
-# ifdef JSON_USE_CPPTL
- /// Return true if the object has a member named key.
- bool isMember( const CppTL::ConstString &key ) const;
-# endif
-
- /// \brief Return a list of the member names.
- ///
- /// If null, return an empty list.
- /// \pre type() is objectValue or nullValue
- /// \post if type() was nullValue, it remains nullValue
- Members getMemberNames() const;
-
-//# ifdef JSON_USE_CPPTL
-// EnumMemberNames enumMemberNames() const;
-// EnumValues enumValues() const;
-//# endif
-
- /// Comments must be //... or /* ... */
- void setComment( const char *comment,
- CommentPlacement placement );
- /// Comments must be //... or /* ... */
- void setComment( const std::string &comment,
- CommentPlacement placement );
- bool hasComment( CommentPlacement placement ) const;
- /// Include delimiters and embedded newlines.
- std::string getComment( CommentPlacement placement ) const;
-
- std::string toStyledString() const;
-
- const_iterator begin() const;
- const_iterator end() const;
-
- iterator begin();
- iterator end();
-
- private:
- Value &resolveReference( const char *key,
- bool isStatic );
-
-# ifdef JSON_VALUE_USE_INTERNAL_MAP
- inline bool isItemAvailable() const
- {
- return itemIsUsed_ == 0;
- }
-
- inline void setItemUsed( bool isUsed = true )
- {
- itemIsUsed_ = isUsed ? 1 : 0;
- }
-
- inline bool isMemberNameStatic() const
- {
- return memberNameIsStatic_ == 0;
- }
-
- inline void setMemberNameIsStatic( bool isStatic )
- {
- memberNameIsStatic_ = isStatic ? 1 : 0;
- }
-# endif // # ifdef JSON_VALUE_USE_INTERNAL_MAP
-
- private:
- struct CommentInfo
- {
- CommentInfo();
- ~CommentInfo();
-
- void setComment( const char *text );
-
- char *comment_;
- };
-
- //struct MemberNamesTransform
- //{
- // typedef const char *result_type;
- // const char *operator()( const CZString &name ) const
- // {
- // return name.c_str();
- // }
- //};
-
- union ValueHolder
- {
- Int int_;
- UInt uint_;
- double real_;
- bool bool_;
- char *string_;
-# ifdef JSON_VALUE_USE_INTERNAL_MAP
- ValueInternalArray *array_;
- ValueInternalMap *map_;
-#else
- ObjectValues *map_;
-# endif
- } value_;
- ValueType type_ : 8;
- int allocated_ : 1; // Notes: if declared as bool, bitfield is useless.
-# ifdef JSON_VALUE_USE_INTERNAL_MAP
- unsigned int itemIsUsed_ : 1; // used by the ValueInternalMap container.
- int memberNameIsStatic_ : 1; // used by the ValueInternalMap container.
-# endif
- CommentInfo *comments_;
- };
-
-
- /** \brief Experimental and untested: represents an element of the "path" to access a node.
- */
- class PathArgument
- {
- public:
- friend class Path;
-
- PathArgument();
- PathArgument( UInt index );
- PathArgument( const char *key );
- PathArgument( const std::string &key );
-
- private:
- enum Kind
- {
- kindNone = 0,
- kindIndex,
- kindKey
- };
- std::string key_;
- UInt index_;
- Kind kind_;
- };
-
- /** \brief Experimental and untested: represents a "path" to access a node.
- *
- * Syntax:
- * - "." => root node
- * - ".[n]" => elements at index 'n' of root node (an array value)
- * - ".name" => member named 'name' of root node (an object value)
- * - ".name1.name2.name3"
- * - ".[0][1][2].name1[3]"
- * - ".%" => member name is provided as parameter
- * - ".[%]" => index is provied as parameter
- */
- class Path
- {
- public:
- Path( const std::string &path,
- const PathArgument &a1 = PathArgument(),
- const PathArgument &a2 = PathArgument(),
- const PathArgument &a3 = PathArgument(),
- const PathArgument &a4 = PathArgument(),
- const PathArgument &a5 = PathArgument() );
-
- const Value &resolve( const Value &root ) const;
- Value resolve( const Value &root,
- const Value &defaultValue ) const;
- /// Creates the "path" to access the specified node and returns a reference on the node.
- Value &make( Value &root ) const;
-
- private:
- typedef std::vector<const PathArgument *> InArgs;
- typedef std::vector<PathArgument> Args;
-
- void makePath( const std::string &path,
- const InArgs &in );
- void addPathInArg( const std::string &path,
- const InArgs &in,
- InArgs::const_iterator &itInArg,
- PathArgument::Kind kind );
- void invalidPath( const std::string &path,
- int location );
-
- Args args_;
- };
-
- /** \brief Experimental do not use: Allocator to customize member name and string value memory management done by Value.
- *
- * - makeMemberName() and releaseMemberName() are called to respectively duplicate and
- * free an Json::objectValue member name.
- * - duplicateStringValue() and releaseStringValue() are called similarly to
- * duplicate and free a Json::stringValue value.
- */
- class ValueAllocator
- {
- public:
- enum { unknown = (unsigned)-1 };
-
- virtual ~ValueAllocator();
-
- virtual char *makeMemberName( const char *memberName ) = 0;
- virtual void releaseMemberName( char *memberName ) = 0;
- virtual char *duplicateStringValue( const char *value,
- unsigned int length = unknown ) = 0;
- virtual void releaseStringValue( char *value ) = 0;
- };
-
-#ifdef JSON_VALUE_USE_INTERNAL_MAP
- /** \brief Allocator to customize Value internal map.
- * Below is an example of a simple implementation (default implementation actually
- * use memory pool for speed).
- * \code
- class DefaultValueMapAllocator : public ValueMapAllocator
- {
- public: // overridden from ValueMapAllocator
- virtual ValueInternalMap *newMap()
- {
- return new ValueInternalMap();
- }
-
- virtual ValueInternalMap *newMapCopy( const ValueInternalMap &other )
- {
- return new ValueInternalMap( other );
- }
-
- virtual void destructMap( ValueInternalMap *map )
- {
- delete map;
- }
-
- virtual ValueInternalLink *allocateMapBuckets( unsigned int size )
- {
- return new ValueInternalLink[size];
- }
-
- virtual void releaseMapBuckets( ValueInternalLink *links )
- {
- delete [] links;
- }
-
- virtual ValueInternalLink *allocateMapLink()
- {
- return new ValueInternalLink();
- }
-
- virtual void releaseMapLink( ValueInternalLink *link )
- {
- delete link;
- }
- };
- * \endcode
- */
- class JSON_API ValueMapAllocator
- {
- public:
- virtual ~ValueMapAllocator();
- virtual ValueInternalMap *newMap() = 0;
- virtual ValueInternalMap *newMapCopy( const ValueInternalMap &other ) = 0;
- virtual void destructMap( ValueInternalMap *map ) = 0;
- virtual ValueInternalLink *allocateMapBuckets( unsigned int size ) = 0;
- virtual void releaseMapBuckets( ValueInternalLink *links ) = 0;
- virtual ValueInternalLink *allocateMapLink() = 0;
- virtual void releaseMapLink( ValueInternalLink *link ) = 0;
- };
-
- /** \brief ValueInternalMap hash-map bucket chain link (for internal use only).
- * \internal previous_ & next_ allows for bidirectional traversal.
- */
- class JSON_API ValueInternalLink
- {
- public:
- enum { itemPerLink = 6 }; // sizeof(ValueInternalLink) = 128 on 32 bits architecture.
- enum InternalFlags {
- flagAvailable = 0,
- flagUsed = 1
- };
-
- ValueInternalLink();
-
- ~ValueInternalLink();
-
- Value items_[itemPerLink];
- char *keys_[itemPerLink];
- ValueInternalLink *previous_;
- ValueInternalLink *next_;
- };
-
-
- /** \brief A linked page based hash-table implementation used internally by Value.
- * \internal ValueInternalMap is a tradional bucket based hash-table, with a linked
- * list in each bucket to handle collision. There is an addional twist in that
- * each node of the collision linked list is a page containing a fixed amount of
- * value. This provides a better compromise between memory usage and speed.
- *
- * Each bucket is made up of a chained list of ValueInternalLink. The last
- * link of a given bucket can be found in the 'previous_' field of the following bucket.
- * The last link of the last bucket is stored in tailLink_ as it has no following bucket.
- * Only the last link of a bucket may contains 'available' item. The last link always
- * contains at least one element unless is it the bucket one very first link.
- */
- class JSON_API ValueInternalMap
- {
- friend class ValueIteratorBase;
- friend class Value;
- public:
- typedef unsigned int HashKey;
- typedef unsigned int BucketIndex;
-
-# ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
- struct IteratorState
- {
- IteratorState()
- : map_(0)
- , link_(0)
- , itemIndex_(0)
- , bucketIndex_(0)
- {
- }
- ValueInternalMap *map_;
- ValueInternalLink *link_;
- BucketIndex itemIndex_;
- BucketIndex bucketIndex_;
- };
-# endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
-
- ValueInternalMap();
- ValueInternalMap( const ValueInternalMap &other );
- ValueInternalMap &operator =( const ValueInternalMap &other );
- ~ValueInternalMap();
-
- void swap( ValueInternalMap &other );
-
- BucketIndex size() const;
-
- void clear();
-
- bool reserveDelta( BucketIndex growth );
-
- bool reserve( BucketIndex newItemCount );
-
- const Value *find( const char *key ) const;
-
- Value *find( const char *key );
-
- Value &resolveReference( const char *key,
- bool isStatic );
-
- void remove( const char *key );
-
- void doActualRemove( ValueInternalLink *link,
- BucketIndex index,
- BucketIndex bucketIndex );
-
- ValueInternalLink *&getLastLinkInBucket( BucketIndex bucketIndex );
-
- Value &setNewItem( const char *key,
- bool isStatic,
- ValueInternalLink *link,
- BucketIndex index );
-
- Value &unsafeAdd( const char *key,
- bool isStatic,
- HashKey hashedKey );
-
- HashKey hash( const char *key ) const;
-
- int compare( const ValueInternalMap &other ) const;
-
- private:
- void makeBeginIterator( IteratorState &it ) const;
- void makeEndIterator( IteratorState &it ) const;
- static bool equals( const IteratorState &x, const IteratorState &other );
- static void increment( IteratorState &iterator );
- static void incrementBucket( IteratorState &iterator );
- static void decrement( IteratorState &iterator );
- static const char *key( const IteratorState &iterator );
- static const char *key( const IteratorState &iterator, bool &isStatic );
- static Value &value( const IteratorState &iterator );
- static int distance( const IteratorState &x, const IteratorState &y );
-
- private:
- ValueInternalLink *buckets_;
- ValueInternalLink *tailLink_;
- BucketIndex bucketsSize_;
- BucketIndex itemCount_;
- };
-
- /** \brief A simplified deque implementation used internally by Value.
- * \internal
- * It is based on a list of fixed "page", each page contains a fixed number of items.
- * Instead of using a linked-list, a array of pointer is used for fast item look-up.
- * Look-up for an element is as follow:
- * - compute page index: pageIndex = itemIndex / itemsPerPage
- * - look-up item in page: pages_[pageIndex][itemIndex % itemsPerPage]
- *
- * Insertion is amortized constant time (only the array containing the index of pointers
- * need to be reallocated when items are appended).
- */
- class JSON_API ValueInternalArray
- {
- friend class Value;
- friend class ValueIteratorBase;
- public:
- enum { itemsPerPage = 8 }; // should be a power of 2 for fast divide and modulo.
- typedef Value::ArrayIndex ArrayIndex;
- typedef unsigned int PageIndex;
-
-# ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
- struct IteratorState // Must be a POD
- {
- IteratorState()
- : array_(0)
- , currentPageIndex_(0)
- , currentItemIndex_(0)
- {
- }
- ValueInternalArray *array_;
- Value **currentPageIndex_;
- unsigned int currentItemIndex_;
- };
-# endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
-
- ValueInternalArray();
- ValueInternalArray( const ValueInternalArray &other );
- ValueInternalArray &operator =( const ValueInternalArray &other );
- ~ValueInternalArray();
- void swap( ValueInternalArray &other );
-
- void clear();
- void resize( ArrayIndex newSize );
-
- Value &resolveReference( ArrayIndex index );
-
- Value *find( ArrayIndex index ) const;
-
- ArrayIndex size() const;
-
- int compare( const ValueInternalArray &other ) const;
-
- private:
- static bool equals( const IteratorState &x, const IteratorState &other );
- static void increment( IteratorState &iterator );
- static void decrement( IteratorState &iterator );
- static Value &dereference( const IteratorState &iterator );
- static Value &unsafeDereference( const IteratorState &iterator );
- static int distance( const IteratorState &x, const IteratorState &y );
- static ArrayIndex indexOf( const IteratorState &iterator );
- void makeBeginIterator( IteratorState &it ) const;
- void makeEndIterator( IteratorState &it ) const;
- void makeIterator( IteratorState &it, ArrayIndex index ) const;
-
- void makeIndexValid( ArrayIndex index );
-
- Value **pages_;
- ArrayIndex size_;
- PageIndex pageCount_;
- };
-
- /** \brief Experimental: do not use. Allocator to customize Value internal array.
- * Below is an example of a simple implementation (actual implementation use
- * memory pool).
- \code
-class DefaultValueArrayAllocator : public ValueArrayAllocator
-{
-public: // overridden from ValueArrayAllocator
- virtual ~DefaultValueArrayAllocator()
- {
- }
-
- virtual ValueInternalArray *newArray()
- {
- return new ValueInternalArray();
- }
-
- virtual ValueInternalArray *newArrayCopy( const ValueInternalArray &other )
- {
- return new ValueInternalArray( other );
- }
-
- virtual void destruct( ValueInternalArray *array )
- {
- delete array;
- }
-
- virtual void reallocateArrayPageIndex( Value **&indexes,
- ValueInternalArray::PageIndex &indexCount,
- ValueInternalArray::PageIndex minNewIndexCount )
- {
- ValueInternalArray::PageIndex newIndexCount = (indexCount*3)/2 + 1;
- if ( minNewIndexCount > newIndexCount )
- newIndexCount = minNewIndexCount;
- void *newIndexes = realloc( indexes, sizeof(Value*) * newIndexCount );
- if ( !newIndexes )
- throw std::bad_alloc();
- indexCount = newIndexCount;
- indexes = static_cast<Value **>( newIndexes );
- }
- virtual void releaseArrayPageIndex( Value **indexes,
- ValueInternalArray::PageIndex indexCount )
- {
- if ( indexes )
- free( indexes );
- }
-
- virtual Value *allocateArrayPage()
- {
- return static_cast<Value *>( malloc( sizeof(Value) * ValueInternalArray::itemsPerPage ) );
- }
-
- virtual void releaseArrayPage( Value *value )
- {
- if ( value )
- free( value );
- }
-};
- \endcode
- */
- class JSON_API ValueArrayAllocator
- {
- public:
- virtual ~ValueArrayAllocator();
- virtual ValueInternalArray *newArray() = 0;
- virtual ValueInternalArray *newArrayCopy( const ValueInternalArray &other ) = 0;
- virtual void destructArray( ValueInternalArray *array ) = 0;
- /** \brief Reallocate array page index.
- * Reallocates an array of pointer on each page.
- * \param indexes [input] pointer on the current index. May be \c NULL.
- * [output] pointer on the new index of at least
- * \a minNewIndexCount pages.
- * \param indexCount [input] current number of pages in the index.
- * [output] number of page the reallocated index can handle.
- * \b MUST be >= \a minNewIndexCount.
- * \param minNewIndexCount Minimum number of page the new index must be able to
- * handle.
- */
- virtual void reallocateArrayPageIndex( Value **&indexes,
- ValueInternalArray::PageIndex &indexCount,
- ValueInternalArray::PageIndex minNewIndexCount ) = 0;
- virtual void releaseArrayPageIndex( Value **indexes,
- ValueInternalArray::PageIndex indexCount ) = 0;
- virtual Value *allocateArrayPage() = 0;
- virtual void releaseArrayPage( Value *value ) = 0;
- };
-#endif // #ifdef JSON_VALUE_USE_INTERNAL_MAP
-
-
- /** \brief base class for Value iterators.
- *
- */
- class ValueIteratorBase
- {
- public:
- typedef unsigned int size_t;
- typedef int difference_type;
- typedef ValueIteratorBase SelfType;
-
- ValueIteratorBase();
-#ifndef JSON_VALUE_USE_INTERNAL_MAP
- explicit ValueIteratorBase( const Value::ObjectValues::iterator ¤t );
-#else
- ValueIteratorBase( const ValueInternalArray::IteratorState &state );
- ValueIteratorBase( const ValueInternalMap::IteratorState &state );
-#endif
-
- bool operator ==( const SelfType &other ) const
- {
- return isEqual( other );
- }
-
- bool operator !=( const SelfType &other ) const
- {
- return !isEqual( other );
- }
-
- difference_type operator -( const SelfType &other ) const
- {
- return computeDistance( other );
- }
-
- /// Return either the index or the member name of the referenced value as a Value.
- Value key() const;
-
- /// Return the index of the referenced Value. -1 if it is not an arrayValue.
- UInt index() const;
-
- /// Return the member name of the referenced Value. "" if it is not an objectValue.
- const char *memberName() const;
-
- protected:
- Value &deref() const;
-
- void increment();
-
- void decrement();
-
- difference_type computeDistance( const SelfType &other ) const;
-
- bool isEqual( const SelfType &other ) const;
-
- void copy( const SelfType &other );
-
- private:
-#ifndef JSON_VALUE_USE_INTERNAL_MAP
- Value::ObjectValues::iterator current_;
- // Indicates that iterator is for a null value.
- bool isNull_;
-#else
- union
- {
- ValueInternalArray::IteratorState array_;
- ValueInternalMap::IteratorState map_;
- } iterator_;
- bool isArray_;
-#endif
- };
-
- /** \brief const iterator for object and array value.
- *
- */
- class ValueConstIterator : public ValueIteratorBase
- {
- friend class Value;
- public:
- typedef unsigned int size_t;
- typedef int difference_type;
- typedef const Value &reference;
- typedef const Value *pointer;
- typedef ValueConstIterator SelfType;
-
- ValueConstIterator();
- private:
- /*! \internal Use by Value to create an iterator.
- */
-#ifndef JSON_VALUE_USE_INTERNAL_MAP
- explicit ValueConstIterator( const Value::ObjectValues::iterator ¤t );
-#else
- ValueConstIterator( const ValueInternalArray::IteratorState &state );
- ValueConstIterator( const ValueInternalMap::IteratorState &state );
-#endif
- public:
- SelfType &operator =( const ValueIteratorBase &other );
-
- SelfType operator++( int )
- {
- SelfType temp( *this );
- ++*this;
- return temp;
- }
-
- SelfType operator--( int )
- {
- SelfType temp( *this );
- --*this;
- return temp;
- }
-
- SelfType &operator--()
- {
- decrement();
- return *this;
- }
-
- SelfType &operator++()
- {
- increment();
- return *this;
- }
-
- reference operator *() const
- {
- return deref();
- }
- };
-
-
- /** \brief Iterator for object and array value.
- */
- class ValueIterator : public ValueIteratorBase
- {
- friend class Value;
- public:
- typedef unsigned int size_t;
- typedef int difference_type;
- typedef Value &reference;
- typedef Value *pointer;
- typedef ValueIterator SelfType;
-
- ValueIterator();
- ValueIterator( const ValueConstIterator &other );
- ValueIterator( const ValueIterator &other );
- private:
- /*! \internal Use by Value to create an iterator.
- */
-#ifndef JSON_VALUE_USE_INTERNAL_MAP
- explicit ValueIterator( const Value::ObjectValues::iterator ¤t );
-#else
- ValueIterator( const ValueInternalArray::IteratorState &state );
- ValueIterator( const ValueInternalMap::IteratorState &state );
-#endif
- public:
-
- SelfType &operator =( const SelfType &other );
-
- SelfType operator++( int )
- {
- SelfType temp( *this );
- ++*this;
- return temp;
- }
-
- SelfType operator--( int )
- {
- SelfType temp( *this );
- --*this;
- return temp;
- }
-
- SelfType &operator--()
- {
- decrement();
- return *this;
- }
-
- SelfType &operator++()
- {
- increment();
- return *this;
- }
-
- reference operator *() const
- {
- return deref();
- }
- };
-
-
-} // namespace Json
-
-
-#endif // CPPTL_JSON_H_INCLUDED