1a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block/*
2a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * Copyright (C) 2003, 2004, 2005, 2007, 2009, 2010 Apple Inc. All rights reserved.
3a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * Copyright 2010, The Android Open Source Project
4a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block *
5a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * Redistribution and use in source and binary forms, with or without
6a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * modification, are permitted provided that the following conditions
7a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * are met:
8a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * 1. Redistributions of source code must retain the above copyright
9a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block *    notice, this list of conditions and the following disclaimer.
10a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * 2. Redistributions in binary form must reproduce the above copyright
11a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block *    notice, this list of conditions and the following disclaimer in the
12a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block *    documentation and/or other materials provided with the distribution.
13a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block *
14a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block */
26a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
2781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#ifndef JavaArrayJSC_h
2881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#define JavaArrayJSC_h
29a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
3021939df44de1705786c545cd1bf519d47250322dBen Murdoch#if ENABLE(JAVA_BRIDGE)
31a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
3253733164eb6cabab5a1eddcabb42e4ce27eb0e44Ben Murdoch#include "BridgeJSC.h"
3381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "JNIUtility.h"
3481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "JobjectWrapper.h"
35a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
36a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Blocknamespace JSC {
37a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
38a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Blocknamespace Bindings {
39a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
40a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Blockclass JavaArray : public Array {
41a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Blockpublic:
42a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block    JavaArray(jobject array, const char* type, PassRefPtr<RootObject>);
43a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block    virtual ~JavaArray();
44a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
45a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block    RootObject* rootObject() const;
46a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
47a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block    virtual void setValueAt(ExecState*, unsigned int index, JSValue) const;
48a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block    virtual JSValue valueAt(ExecState*, unsigned int index) const;
49a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block    virtual unsigned int getLength() const;
50a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
51a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block    jobject javaArray() const { return m_array->m_instance; }
52a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
53a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block    static JSValue convertJObjectToArray(ExecState*, jobject, const char* type, PassRefPtr<RootObject>);
54a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
55a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Blockprivate:
5681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<JobjectWrapper> m_array;
57a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block    unsigned int m_length;
58a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block    const char* m_type;
59a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block};
60a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
61a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block} // namespace Bindings
62a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
63a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block} // namespace JSC
64a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
6521939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif // ENABLE(JAVA_BRIDGE)
66a96d9eff8bdc7ed33739f5779a8d40ab1b3ae24fSteve Block
6781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif // JavaArrayJSC_h
68