diff -r f5050f1da672 -r 04becd199f91 javaruntimes/starterutils/src/jvmstarterimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaruntimes/starterutils/src/jvmstarterimpl.h Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,251 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: a Base class for starting the JVM. +* +*/ + + +#ifndef JVMSTARTERIMPL_H +#define JVMSTARTERIMPL_H + +#include "jvmstarter.h" + +#include +#include +#include +#include + +namespace java // codescanner::namespace +{ + +namespace runtime // codescanner::namespace +{ + +/** + * This class implements partially the interface JvmStarter. The class mainly + * contains argument storing and modifying features. The static instance + * getters and virtual JVM starting methods are left to be implemented by + * the JVM specific starter which will be inherited from this class. + */ + + +OS_NONSHARABLE_CLASS(JvmStarterImpl) : public JvmStarter +{ +public: + + /** + * Destructor of the JvmStarterImpl. + */ + virtual ~JvmStarterImpl(); + + /** + * @see jvmstarter.h + */ + virtual void appendClassPath(const std::wstring& file); + + /** + * @see jvmstarter.h + */ + virtual void appendBootClassPath(const std::wstring& file); + + /** + * @see jvmstarter.h + */ + virtual void prependBootClassPath(const std::wstring& file); + + /** + * @see jvmstarter.h + */ + virtual void appendExtensionPath(const std::wstring& extensionPath); + + /** + * @see jvmstarter.h + */ + virtual void setMainClass(const std::wstring& mainClass); + + /** + * @see jvmstarter.h + */ + virtual void appendApplicationArgument(const std::wstring& argument); + + /** + * @see jvmstarter.h + */ + virtual void appendSystemProperty(const std::wstring& systemproperty); + + /** + * @see jvmstarter.h + */ + virtual void appendRawJvmArgument(const std::wstring& argument); + + /** + * @see jvmstarter.h + */ + virtual void disableJit(); + + /** + * @see jvmstarter.h + */ + virtual void enableThreadDumping(); + +protected: // Definitions + + /** + * Clears all the std string & Lists. + */ + virtual void clear(); + + typedef std::list JvmArgs_t; + + // A simple class for storing char* array that is deleted automatically + // when going out of scope. + class ScopedCharPointerArray + { + public: + + ScopedCharPointerArray(int size) : mBuffer(0), mSize(size) + { + mBuffer = new char* [size]; + memset(mBuffer, 0, mSize * sizeof(char*)); + } + + ~ScopedCharPointerArray() + { + for (int i = 0; i < mSize; i++) + { + delete[] mBuffer[i]; + } + delete[] mBuffer; + } + + char** get() + { + return mBuffer; + } + + private: + + /* + * No copy constructor allowed. + */ + ScopedCharPointerArray(const ScopedCharPointerArray&); + + /* + * No Assignment operator allowed. + */ + ScopedCharPointerArray& operator= (const ScopedCharPointerArray&); + + private: + char** mBuffer; + int mSize; + }; + + // A simple class for storing char* pointers that is deleted automatically + // when going out of scope. + class ScopedCharPointer + { + public: + + ScopedCharPointer() + { + } + + ScopedCharPointer(char* ptr) : mBuffer(ptr) + { + } + + ~ScopedCharPointer() + { + delete[] mBuffer; + } + + void set(char* ptr) + { + mBuffer = ptr; + } + + char* get() + { + return mBuffer; + } + + private: + + /* + * No copy constructor allowed. + */ + ScopedCharPointer(const ScopedCharPointer&); + + /* + * No Assignment operator allowed. + */ + ScopedCharPointer& operator= (const ScopedCharPointer&); + + private: + char* mBuffer; + }; + + +protected: //Methods + JvmStarterImpl(); // Default constructor allowed for inherited classes + + /** + * Appends the given source path to the given destination path. If there + * already exists a path a platform specific classpath separator is added + * before doing the appending Converts the path separtors to platform + * specifc ones. + * @param source The source path to be appended. + * @param destination The destination path where to be appended. + */ + void appendAndConvertClassPath(const std::wstring& source, + std::wstring& destination); + + +protected: // Members + + std::wstring mIdentifier; // For identifying the runtime. + std::wstring mClassPath; // The classpath of the application + std::wstring mBootClassPathAppend; // The appended boot classpath + std::wstring mBootClassPathPrepend; // The prepended boot classpath + std::wstring mExtensionPath; // The extension path to be used + std::wstring mMainClass; // The main class of the application + bool mJitDisabled; // Is the JIT disabled + bool mTheadDumpEnabled; // Is the thread dump feature enabled + Configuration mConfiguration; // CLDC or CDC + JvmArgs_t mJvmArgs; // A list containing Jvm arguments. + // This doesn't contain such + // that has dedicated member variable + // like the classpath + JvmArgs_t mAppAndArgs; // A list containing application + // class and arguments for the + // application + +private: // Methods + /** + * No copy constructor allowed + */ + JvmStarterImpl(const JvmStarterImpl&); + + /** + * No Assignment operator allowed + */ + JvmStarterImpl& operator= (const JvmStarterImpl&); + +}; + +} // end namespace runtime +} // end namespace java + + +#endif // JVMSTARTERIMPL_H