[jboss-cvs] JBoss Messaging SVN: r3700 - projects/jaio/trunk/jaio/native/src.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Feb 11 12:24:36 EST 2008
Author: clebert.suconic at jboss.com
Date: 2008-02-11 12:24:36 -0500 (Mon, 11 Feb 2008)
New Revision: 3700
Added:
projects/jaio/trunk/jaio/native/src/FileOutput.cpp
projects/jaio/trunk/jaio/native/src/FileOutput.h
Modified:
projects/jaio/trunk/jaio/native/src/AIOController.cpp
projects/jaio/trunk/jaio/native/src/AIOController.h
projects/jaio/trunk/jaio/native/src/BufferAdapter.h
projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.cpp
projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.h
projects/jaio/trunk/jaio/native/src/LibAIOController.cpp
projects/jaio/trunk/jaio/native/src/Makefile.am
projects/jaio/trunk/jaio/native/src/PageManager.cpp
projects/jaio/trunk/jaio/native/src/PageManager.h
projects/jaio/trunk/jaio/native/src/PageObserver.cpp
projects/jaio/trunk/jaio/native/src/PageObserver.h
projects/jaio/trunk/jaio/native/src/org_jboss_jaio_libaioimpl_LibAIOController.h
Log:
Implementing PagingManager and Observers
Modified: projects/jaio/trunk/jaio/native/src/AIOController.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/AIOController.cpp 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/AIOController.cpp 2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,7 +1,7 @@
#include "AIOController.h"
#include "PageManager.h"
-AIOController::AIOController() : manager(10 * 1024)
+AIOController::AIOController(int fileHandle) : fileOutput(fileHandle), manager(10 * 1024, &fileOutput)
{
}
Modified: projects/jaio/trunk/jaio/native/src/AIOController.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/AIOController.h 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/AIOController.h 2008-02-11 17:24:36 UTC (rev 3700)
@@ -3,6 +3,7 @@
#include <jni.h>
#include "PageManager.h"
+#include "FileOutput.h"
class AIOController
{
@@ -13,8 +14,9 @@
jmethodID done;
int fileHandle;
JNIEnv * env;
+ FileOutput fileOutput;
PageManager manager;
- AIOController();
+ AIOController(int fileHandle);
virtual ~AIOController();
};
#endif /*AIOCONTROLLER_H_*/
Modified: projects/jaio/trunk/jaio/native/src/BufferAdapter.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/BufferAdapter.h 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/BufferAdapter.h 2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,6 +1,7 @@
#ifndef BUFFERADAPTER_H_
#define BUFFERADAPTER_H_
+#include <iostream>
class BufferAdapter
{
public:
@@ -16,5 +17,6 @@
virtual void encode(const int& size, void *) = 0;
virtual void done() = 0;
virtual int blockSize() = 0;
+ virtual void killYourself() = 0;
};
#endif /*BUFFERADAPTER_H_*/
Added: projects/jaio/trunk/jaio/native/src/FileOutput.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/FileOutput.cpp (rev 0)
+++ projects/jaio/trunk/jaio/native/src/FileOutput.cpp 2008-02-11 17:24:36 UTC (rev 3700)
@@ -0,0 +1,27 @@
+#include "FileOutput.h"
+#include <list>
+#include <iostream>
+#include <memory.h>
+
+FileOutput::FileOutput(int _fileHandle)
+{
+ fileHandle = _fileHandle;
+}
+
+FileOutput::~FileOutput()
+{
+}
+
+void FileOutput::completePage(long size, void * page, std::list<BufferAdapter *> * adapters)
+{
+ std::cout << (char *)page;
+ for (std::list<BufferAdapter *>::iterator iter = adapters->begin(); iter != adapters->end(); iter++)
+ {
+ std::cout << "Element read\n\n";
+ (*iter)->done();
+ (*iter)->killYourself();
+ }
+
+ free (page);
+ delete adapters;
+}
Property changes on: projects/jaio/trunk/jaio/native/src/FileOutput.cpp
___________________________________________________________________
Name: svn:keywords
+ "Id LastChangedDate Author Revision"
Added: projects/jaio/trunk/jaio/native/src/FileOutput.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/FileOutput.h (rev 0)
+++ projects/jaio/trunk/jaio/native/src/FileOutput.h 2008-02-11 17:24:36 UTC (rev 3700)
@@ -0,0 +1,17 @@
+#ifndef FILEOUTPUT_H_
+#define FILEOUTPUT_H_
+
+#include "PageObserver.h"
+
+class FileOutput : public PageObserver
+{
+private:
+ int fileHandle;
+public:
+ FileOutput(int fileHandle);
+ virtual ~FileOutput();
+ void completePage(long size, void *, std::list<BufferAdapter *> *);
+
+};
+
+#endif /*FILEOUTPUT_H_*/
Modified: projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.cpp 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.cpp 2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,14 +1,16 @@
#include <jni.h>
#include "JNIBufferAdapter.h"
+#include <iostream>
JNIBufferAdapter::JNIBufferAdapter(AIOController * _controller, jobject _obj) : BufferAdapter()
{
controller = _controller;
- obj = _obj;
+ obj = controller->env->NewGlobalRef(_obj);
}
JNIBufferAdapter::~JNIBufferAdapter()
{
+ controller->env->DeleteGlobalRef(obj);
}
@@ -19,10 +21,12 @@
}
void JNIBufferAdapter::done()
{
+ std::cout << "Calling done " << controller->done;
+ controller->env->CallVoidMethod(obj,controller->done);
return;
}
int JNIBufferAdapter::blockSize()
{
- return 0;
+ return controller->env->CallIntMethod(obj,controller->encodeSize);
}
Modified: projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.h 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/JNIBufferAdapter.h 2008-02-11 17:24:36 UTC (rev 3700)
@@ -16,5 +16,11 @@
void done();
int blockSize();
+ virtual void killYourself()
+ {
+ delete this;
+ }
+
+
};
#endif /*JNIBUFFERADAPTER_H_*/
Modified: projects/jaio/trunk/jaio/native/src/LibAIOController.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/LibAIOController.cpp 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/LibAIOController.cpp 2008-02-11 17:24:36 UTC (rev 3700)
@@ -20,7 +20,15 @@
{
std::string fileName = convertJavaString(env, jstrFileName);
- AIOController * controller = new AIOController();
+
+ int handle = open(fileName.data(), O_WRONLY | O_CREAT, 0666);
+ if (handle < 0)
+ {
+ throwException(env, "java/lang/RuntimeException", "Can't open file");
+ return 0;
+ }
+
+ AIOController * controller = new AIOController(handle);
controller->done = env->GetMethodID(clazz,"done","()V");
if (!controller->done) return 0;
@@ -34,13 +42,7 @@
if (!controller->done) return 0;
- controller->fileHandle = open(fileName.data(), O_WRONLY | O_CREAT, 0666);
- if (controller->fileHandle < 0)
- {
- throwException(env, "java/lang/RuntimeException", "Can't open file");
- delete controller;
- return 0;
- }
+ controller->fileHandle = handle;
controller->env = env;
@@ -51,7 +53,14 @@
(JNIEnv *, jclass, jlong controllerAddress, jobject obj)
{
AIOController * controller = (AIOController *) controllerAddress;
- JNIBufferAdapter adapter (controller, obj);
+ JNIBufferAdapter * adapter = new JNIBufferAdapter(controller, obj);
controller->manager.addData(adapter);
}
+JNIEXPORT void JNICALL Java_org_jboss_jaio_libaioimpl_LibAIOController_flushMemory
+ (JNIEnv *, jclass, jlong controllerAddress)
+{
+ AIOController * controller = (AIOController *) controllerAddress;
+ controller->manager.flush();
+
+}
Modified: projects/jaio/trunk/jaio/native/src/Makefile.am
===================================================================
--- projects/jaio/trunk/jaio/native/src/Makefile.am 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/Makefile.am 2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,7 +1,7 @@
#AM_CXXFLAGS = $(JVM_CXXFLAGS)
lib_LTLIBRARIES = libJaio.la
-libJaio_la_SOURCES = LibAIOController.cpp AIOController.cpp JavaUtilities.h PageManager.cpp AIOController.h JNIBufferAdapter.cpp PageManager.h BufferAdapter.h JNIBufferAdapter.h PageObserver.cpp JavaUtilities.cpp org_jboss_jaio_libaioimpl_LibAIOController.h PageObserver.h
+libJaio_la_SOURCES = LibAIOController.cpp AIOController.cpp JavaUtilities.h PageManager.cpp AIOController.h JNIBufferAdapter.cpp PageManager.h BufferAdapter.h JNIBufferAdapter.h PageObserver.cpp JavaUtilities.cpp org_jboss_jaio_libaioimpl_LibAIOController.h PageObserver.h FileOutput.h FileOutput.cpp
#libJaio_la_SOURCES = LibAIOController.cpp AIOController.cpp
\ No newline at end of file
Modified: projects/jaio/trunk/jaio/native/src/PageManager.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/PageManager.cpp 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/PageManager.cpp 2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,9 +1,12 @@
+#include "memory.h"
+#include "BufferAdapter.h"
#include "PageManager.h"
-#include "BufferAdapter.h"
-PageManager::PageManager(int _pageSize)
+PageManager::PageManager(int _pageSize, PageObserver * _observer)
{
pageSize = _pageSize;
+ observer = _observer;
+ initMemory();
}
PageManager::~PageManager()
@@ -11,8 +14,26 @@
}
-void PageManager::addData(BufferAdapter& adapter)
+void PageManager::addData(BufferAdapter * adapter)
{
- char * str = "Hello Guys";
- adapter.encode (10, (void *)str);
+
+ list->push_back(adapter);
+ int size = adapter->blockSize();
+
+ adapter->encode (size, memoryArea + pagePosition);
+
+ pagePosition += size;
}
+
+void PageManager::initMemory()
+{
+ memoryArea = (char *)malloc(pageSize);
+ list = new std::list<BufferAdapter *>();
+ pagePosition = 0;
+}
+
+void PageManager::flush()
+{
+ observer->completePage(pagePosition, memoryArea, list);
+ initMemory();
+}
Modified: projects/jaio/trunk/jaio/native/src/PageManager.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/PageManager.h 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/PageManager.h 2008-02-11 17:24:36 UTC (rev 3700)
@@ -2,16 +2,28 @@
#define PAGEMANAGER_H_
#include "BufferAdapter.h"
+#include "PageObserver.h"
+#include <list>
+
class PageManager
{
private:
int pageSize;
+ int pagePosition;
+ std::list<BufferAdapter *> * list;
+ char * memoryArea;
+
+ PageObserver * observer;
+
+ void initMemory();
+
public:
- PageManager(int pageSize);
+ PageManager(int pageSize, PageObserver * observer);
virtual ~PageManager();
- void addData(BufferAdapter& adapter);
+ void addData(BufferAdapter* adapter);
+ void flush();
};
#endif /*PAGEMANAGER_H_*/
Modified: projects/jaio/trunk/jaio/native/src/PageObserver.cpp
===================================================================
--- projects/jaio/trunk/jaio/native/src/PageObserver.cpp 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/PageObserver.cpp 2008-02-11 17:24:36 UTC (rev 3700)
@@ -1,9 +1,2 @@
#include "PageObserver.h"
-PageObserver::PageObserver()
-{
-}
-
-PageObserver::~PageObserver()
-{
-}
Modified: projects/jaio/trunk/jaio/native/src/PageObserver.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/PageObserver.h 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/PageObserver.h 2008-02-11 17:24:36 UTC (rev 3700)
@@ -4,13 +4,23 @@
#include <list>
#include "BufferAdapter.h"
-class PageObserver : public BufferAdapter
+/**
+ * This is probably going to be the file itself
+ */
+class PageObserver
{
public:
- PageObserver();
- ~PageObserver();
+ PageObserver()
+ {
+
+ }
+
+ virtual ~PageObserver()
+ {
+ }
- virtual void completePage(void *, std::list<BufferAdapter>)=0;
+ // Implementations of PageObserver should also delete the list, and delete each element of BufferAdapter calling BufferAdapter::killYourslef()
+ virtual void completePage(long size, void *, std::list<BufferAdapter *> *)=0;
};
#endif /*PAGEOBSERVER_H_*/
Modified: projects/jaio/trunk/jaio/native/src/org_jboss_jaio_libaioimpl_LibAIOController.h
===================================================================
--- projects/jaio/trunk/jaio/native/src/org_jboss_jaio_libaioimpl_LibAIOController.h 2008-02-11 09:17:45 UTC (rev 3699)
+++ projects/jaio/trunk/jaio/native/src/org_jboss_jaio_libaioimpl_LibAIOController.h 2008-02-11 17:24:36 UTC (rev 3700)
@@ -23,6 +23,14 @@
JNIEXPORT void JNICALL Java_org_jboss_jaio_libaioimpl_LibAIOController_append
(JNIEnv *, jclass, jlong, jobject);
+/*
+ * Class: org_jboss_jaio_libaioimpl_LibAIOController
+ * Method: flushMemory
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_jboss_jaio_libaioimpl_LibAIOController_flushMemory
+ (JNIEnv *, jclass, jlong);
+
#ifdef __cplusplus
}
#endif
More information about the jboss-cvs-commits
mailing list