changeset 229:401b55a4a4dd

add Random class
author gongo@gendarme.cr.ie.u-ryukyu.ac.jp
date Thu, 12 Feb 2009 19:05:02 +0900
parents c254a2bd1b34
children 2b114977852d
files TaskManager/ChangeLog TaskManager/Test/test_render/SceneGraph.cpp TaskManager/Test/test_render/SceneGraph.h TaskManager/Test/test_render/SceneGraphArray.h TaskManager/Test/test_render/SceneGraphRoot.h TaskManager/Test/test_render/task/DrawSpan.cpp TaskManager/Test/test_render/viewer.cpp TaskManager/kernel/ppe/Random.cc TaskManager/kernel/ppe/TaskManager.cc include/TaskManager/Random.h include/TaskManager/TaskManager.h
diffstat 11 files changed, 150 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/ChangeLog	Thu Feb 12 16:31:38 2009 +0900
+++ b/TaskManager/ChangeLog	Thu Feb 12 19:05:02 2009 +0900
@@ -1,3 +1,10 @@
+2009-02-12  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>
+
+	* add: kernel/ppe/Random.cc
+	乱数生成クラス。
+	ゲームだとユーザ使うでしょうきっと。
+	一応 /dev/random から seed 取る様にしてます
+
 2009-02-04  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>
 
 	* kernel/ppe/TaskManager.cc (TaskManager::allocate): rename
--- a/TaskManager/Test/test_render/SceneGraph.cpp	Thu Feb 12 16:31:38 2009 +0900
+++ b/TaskManager/Test/test_render/SceneGraph.cpp	Thu Feb 12 19:05:02 2009 +0900
@@ -738,12 +738,29 @@
     this->last = next;
 }
 
+/**
+ * SceneGraph の clone
+ * @return clone SceneGraph
+ */
 SceneGraphPtr
 SceneGraph::clone(void) {
     SceneGraphPtr p = new SceneGraph(this);
     return p;
 }
 
+/**
+ * SceneGraph の clone
+ * 予め allocate されてる領域への placement new を行う
+ *
+ * @param buf clone 領域
+ * @return clone SceneGraph
+ */
+SceneGraphPtr
+SceneGraph::clone(void *buf) {
+    SceneGraphPtr p = new(buf) SceneGraph(this);
+    return p;
+}
+
 void
 SceneGraph::remove(void)
 {
--- a/TaskManager/Test/test_render/SceneGraph.h	Thu Feb 12 16:31:38 2009 +0900
+++ b/TaskManager/Test/test_render/SceneGraph.h	Thu Feb 12 19:05:02 2009 +0900
@@ -69,6 +69,7 @@
     SceneGraphPtr addChild(SceneGraphPtr child);
     SceneGraphPtr addBrother(SceneGraphPtr bro);
     SceneGraphPtr clone(void);
+    SceneGraphPtr clone(void *buf);
     SceneGraphPtr searchSceneGraph(char *name);
     void set_move_collision(SceneGraphPtr node,
 			    move_func new_move, collision_func new_collision);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Test/test_render/SceneGraphArray.h	Thu Feb 12 19:05:02 2009 +0900
@@ -0,0 +1,45 @@
+#ifndef INCUDED_SCENE_GRAPH_ARRAY
+#define INCUDED_SCENE_GRAPH_ARRAY
+
+#ifndef INCLUDED_SCENE_GRAPH
+#  include "SceneGraph.h"
+#endif
+
+// 下ですぐ #undef してます
+#define MAX_SIZE 32
+
+class SceneGraphArray {
+public:
+    SceneGraph buf[MAX_SIZE];
+    int size;
+    int pad[3];
+
+    SceneGraphArray(void) : size(0) {}
+
+    /**
+     * array の初期化
+     */
+    void init(void) {
+	size = 0;
+    }
+
+    /**
+     * buf から SceneGraph buffer を返す
+     *
+     * @retval SceneGraph if size < MAX_SIZE
+     * @retval NULL if size >= MAX_SIZE
+     */
+    SceneGraphPtr getNext(void) {
+	if (size >= MAX_SIZE) {
+	    return NULL;
+	} else {
+	    return &buf[size++];
+	}
+    }
+};
+
+typedef SceneGraphArray *SceneGraphArrayPtr;
+
+#undef MAX_SIZE
+
+#endif
--- a/TaskManager/Test/test_render/SceneGraphRoot.h	Thu Feb 12 16:31:38 2009 +0900
+++ b/TaskManager/Test/test_render/SceneGraphRoot.h	Thu Feb 12 19:05:02 2009 +0900
@@ -5,6 +5,10 @@
 #  include "SceneGraph.h"
 #endif
 
+#ifndef INCLUDED_SCENE_GRAPH_ARRAY
+#  include "SceneGraphArray.h"
+#endif
+
 #ifndef INCLUDED_CAMERA
 #  include "Camera.h"
 #endif
@@ -36,6 +40,10 @@
     // draw_tree は描画後削除される
     SceneGraphPtr sg_remove_list;
 
+    SceneGraphArrayPtr sg_array1;
+    SceneGraphArrayPtr sg_array2;
+    SceneGraphArrayPtr sg_curArray;
+
     // コントローラーオブジェクト (Keyboard, Joystick, ..)
     Pad *controller;
 
--- a/TaskManager/Test/test_render/task/DrawSpan.cpp	Thu Feb 12 16:31:38 2009 +0900
+++ b/TaskManager/Test/test_render/task/DrawSpan.cpp	Thu Feb 12 19:05:02 2009 +0900
@@ -531,7 +531,8 @@
     tileList = (TileListPtr)smanager->global_get(GLOBAL_TILE_LIST);
 
     zRow = zRow_init(rangex, rangey);
-    linebuf = linebuf_init(rangex, rangey, 0xffffffff);
+    //linebuf = linebuf_init(rangex, rangey, 0xffffffff);
+    linebuf = linebuf_init(rangex, rangey, 0);
 
     doneWrite = 0;
 
--- a/TaskManager/Test/test_render/viewer.cpp	Thu Feb 12 16:31:38 2009 +0900
+++ b/TaskManager/Test/test_render/viewer.cpp	Thu Feb 12 19:05:02 2009 +0900
@@ -44,7 +44,7 @@
 }
 
 int
-Viewer::get_ticks()
+Viewer::get_ticks(void)
 {
     int time;
     time = SDL_GetTicks();
@@ -52,7 +52,7 @@
 }
 
 bool
-Viewer::quit_check()
+Viewer::quit_check(void)
 {
     SDL_Event event;
 
@@ -72,13 +72,13 @@
 }
 
 void
-Viewer::quit()
+Viewer::quit(void)
 {
     SDL_Quit();
 }
 
 void
-Viewer::swap_buffers()
+Viewer::swap_buffers(void)
 {
     SDL_GL_SwapBuffers();
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/Random.cc	Thu Feb 12 19:05:02 2009 +0900
@@ -0,0 +1,35 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "Random.h"
+
+/**
+ * /dev/random から取得した値を seed として使う
+ */
+Random::Random(void)
+{
+    FILE *fp;
+    unsigned int seed;
+
+    if ((fp = fopen("/dev/random", "r")) == NULL) {
+	seed = 12345;
+    } else {
+	fread(&seed, sizeof(unsigned int), 1, fp);
+	fclose(fp);
+    }
+
+    srandom(seed);
+}
+
+/**
+ * 引数で seed を指定する
+ */
+Random::Random(unsigned int seed)
+{
+    srandom(seed);
+}
+
+int
+Random::getData(void)
+{
+    return random();
+}
--- a/TaskManager/kernel/ppe/TaskManager.cc	Thu Feb 12 16:31:38 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManager.cc	Thu Feb 12 19:05:02 2009 +0900
@@ -1,10 +1,14 @@
 #include "TaskManager.h"
 
-TaskManager::TaskManager(int num) : machineNum(num) {}
+TaskManager::TaskManager(int num) : machineNum(num)
+{
+    gen_random = new Random;
+}
 
 TaskManager::~TaskManager(void)
 {
     delete m_impl;
+    delete gen_random;
 }
 
 /**
@@ -75,3 +79,9 @@
 {
     return machineNum;
 }
+
+int
+TaskManager::get_random(void)
+{
+    return gen_random->getData();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/include/TaskManager/Random.h	Thu Feb 12 19:05:02 2009 +0900
@@ -0,0 +1,14 @@
+#ifndef INCLUDED_RANDOM
+#define INCLUDED_RANDOM
+
+class Random {
+public:
+    Random(void);
+    Random(unsigned int seed);
+
+    int getData(void);
+};
+
+typedef Random *RandomPtr;
+
+#endif
--- a/include/TaskManager/TaskManager.h	Thu Feb 12 16:31:38 2009 +0900
+++ b/include/TaskManager/TaskManager.h	Thu Feb 12 19:05:02 2009 +0900
@@ -5,6 +5,10 @@
 #  include "TaskManagerImpl.h"
 #endif
 
+#ifndef INCLUDED_RANDOM
+#  include "Random.h"
+#endif
+
 class TaskManager {
 public:
     /* constructor */
@@ -14,6 +18,7 @@
     /* variables */
     TaskManagerImpl *m_impl;    
     void (*tm_end)(void);
+    RandomPtr gen_random;
 
     /* user function */
     HTaskPtr create_task(int cmd);
@@ -21,6 +26,7 @@
     void *allocate(int size);
     void set_TMend(void (*endf)(void));
     int get_cpuNum(void);
+    int get_random(void);
 
     /* functions */
     void init(void);