--- /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 <algorithm>
+#include <string.h>
+#include <string>
+#include <list>
+
+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<std::wstring> 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