diff options
author | cathook <b01902109@csie.ntu.edu.tw> | 2014-05-02 04:10:56 +0800 |
---|---|---|
committer | cathook <b01902109@csie.ntu.edu.tw> | 2014-05-02 04:10:56 +0800 |
commit | 33d419e4d54d969798af80f05e05f0c447a99594 (patch) | |
tree | c78355a2d334e34df865aca865dbb4864a85820c /meowpp | |
parent | d2d7a49563a8f04bd07264a4a989d5656313d375 (diff) | |
download | meow-33d419e4d54d969798af80f05e05f0c447a99594.tar meow-33d419e4d54d969798af80f05e05f0c447a99594.tar.gz meow-33d419e4d54d969798af80f05e05f0c447a99594.tar.bz2 meow-33d419e4d54d969798af80f05e05f0c447a99594.tar.lz meow-33d419e4d54d969798af80f05e05f0c447a99594.tar.xz meow-33d419e4d54d969798af80f05e05f0c447a99594.tar.zst meow-33d419e4d54d969798af80f05e05f0c447a99594.zip |
big change about dir structure
Diffstat (limited to 'meowpp')
-rw-r--r-- | meowpp/dsa/KD_Tree.h | 2 | ||||
-rw-r--r-- | meowpp/dsa/KD_Tree.hpp | 16 | ||||
-rw-r--r-- | meowpp/dsa/SegmentTree.hpp | 2 | ||||
-rw-r--r-- | meowpp/dsa/VP_Tree.hpp | 19 | ||||
-rw-r--r-- | meowpp/oo/ObjBase.h | 8 | ||||
-rw-r--r-- | meowpp/oo/ObjPort.h | 18 | ||||
-rw-r--r-- | meowpp/oo/ObjPort.hpp | 47 | ||||
-rw-r--r-- | meowpp/oo/ObjSelector.h | 11 |
8 files changed, 103 insertions, 20 deletions
diff --git a/meowpp/dsa/KD_Tree.h b/meowpp/dsa/KD_Tree.h index b4e579c..dcb60a7 100644 --- a/meowpp/dsa/KD_Tree.h +++ b/meowpp/dsa/KD_Tree.h @@ -75,7 +75,7 @@ namespace meow{ void query(Vector const& __vector, size_t __nearestNumber, AnswerCompare const& __answerCompare, - size_t __index, + ssize_t __index, int __depth, std::vector<Scalar>& __dist2Vector, Scalar __dist2Minimum, diff --git a/meowpp/dsa/KD_Tree.hpp b/meowpp/dsa/KD_Tree.hpp index 735d4af..824b917 100644 --- a/meowpp/dsa/KD_Tree.hpp +++ b/meowpp/dsa/KD_Tree.hpp @@ -84,14 +84,14 @@ namespace meow{ //////////////////////////////////////////////////////////////////// template<class Vector, class Scalar> inline void - KD_Tree<Vector, Scalar>::query(Vector const& __vector, - size_t __nearestNumber, + KD_Tree<Vector, Scalar>::query(Vector const& __vector, + size_t __nearestNumber, AnswerCompare const& __answerCompare, - size_t __index, - int __depth, + ssize_t __index, + int __depth, std::vector<Scalar>& __dist2Vector, Scalar __dist2Minimum, - Answers *__out) const{ + Answers* __out) const{ if(__index == _NIL) return ; size_t cmp = __depth % _dimension; ssize_t this_side, that_side; @@ -144,7 +144,7 @@ namespace meow{ for(ssize_t i = mid + 1; i <= __end; i++){ __orders[which_side][__orders[cmp][i]] = 1; } - for(int i = 0; i < _dimension; i++){ + for(size_t i = 0; i < _dimension; i++){ if(i == cmp) continue; size_t left = __beg, right = mid + 1; for(int j = __beg; j <= __end; j++){ @@ -216,10 +216,10 @@ namespace meow{ inline void KD_Tree<Vector, Scalar>::forceBuild(){ std::vector<size_t> *orders = new std::vector<size_t>[_dimension + 2]; - for(int j = 0; j < _dimension + 2; j++){ + for(size_t j = 0; j < _dimension + 2; j++){ orders[j].resize(_nodes.size()); } - for(int j = 0; j < _dimension; j++){ + for(size_t j = 0; j < _dimension; j++){ for(size_t i = 0, I = _nodes.size(); i < I; i++){ orders[j][i] = i; } diff --git a/meowpp/dsa/SegmentTree.hpp b/meowpp/dsa/SegmentTree.hpp index bdd43fb..15ac0ef 100644 --- a/meowpp/dsa/SegmentTree.hpp +++ b/meowpp/dsa/SegmentTree.hpp @@ -70,7 +70,7 @@ namespace meow{ template<class Value> inline bool SegmentTree<Value>::rangeCorrect(ssize_t* __first, ssize_t* __last) const{ - if(*__last<*__first || *__last<0 || _size-1<*__first) return false; + if(*__last<*__first || *__last<0 || (ssize_t)_size-1<*__first) return false; *__first = inRange((ssize_t)0, (ssize_t)_size - 1, *__first); *__last = inRange((ssize_t)0, (ssize_t)_size - 1, *__last ); return true; diff --git a/meowpp/dsa/VP_Tree.hpp b/meowpp/dsa/VP_Tree.hpp index 2026050..bb6b5f1 100644 --- a/meowpp/dsa/VP_Tree.hpp +++ b/meowpp/dsa/VP_Tree.hpp @@ -69,8 +69,6 @@ namespace meow{ VP_Tree<Vector, Scalar>::split(ssize_t __first, ssize_t __last, size_t __order, Vector const& __center){ ssize_t first0 = __first; - ssize_t last0 = __last; - ssize_t order0 = __order; std::vector<Scalar> dist2(__last - __first + 1); for(ssize_t i = __first; i <= __last; i++){ dist2[i - first0] = distance2(_vectors[i], __center); @@ -79,10 +77,10 @@ namespace meow{ size_t threshold_index = __first + rand() % (__last - __first + 1); Scalar threshold(dist2[threshold_index - first0]); size_t large_first = __last + 1; - for(size_t i = __first; __first <= large_first - 1; large_first--){ + for(ssize_t i=__first; __first<=(ssize_t)large_first-1; large_first--){ if(threshold < dist2[large_first - 1 - first0]) continue; - while(i < large_first - 1 && !(threshold < dist2[i - first0])) i++; - if(i < large_first - 1){ + while(i < (ssize_t)large_first-1&&!(threshold < dist2[i-first0])) i++; + if(i < (ssize_t)large_first - 1){ std::swap(dist2 [large_first - 1 - first0], dist2 [i - first0]); std::swap(_vectors[large_first - 1 ], _vectors[i ]); i++; @@ -90,10 +88,10 @@ namespace meow{ break; } } - if(large_first == __last + 1){ + if(large_first == (size_t)__last + 1){ std::swap(dist2 [threshold_index-first0], dist2 [__last-first0]); std::swap(_vectors[threshold_index ], _vectors[__last ]); - if(__order == __last - __first){ + if((ssize_t)__order == __last - __first){ __first = __last; break; } @@ -182,15 +180,18 @@ namespace meow{ template<class Vector, class Scalar> inline VP_Tree<Vector, Scalar>::VP_Tree(VP_Tree<Vector, Scalar> const& __tree2): - _root(dup(__tree2._root)), _vectors(__tree2._vectors), + _root(dup(__tree2._root)), _dimension(__tree2._dimension), _needRebuild(__tree2._needRebuild){ } template<class Vector, class Scalar> inline VP_Tree<Vector, Scalar>::VP_Tree(size_t __dimension): - _root(NULL), _vectors(0), _dimension(0), _needRebuild(false){ + _vectors(0), + _root(NULL), + _dimension(0), + _needRebuild(false){ reset(__dimension); } template<class Vector, class Scalar> diff --git a/meowpp/oo/ObjBase.h b/meowpp/oo/ObjBase.h index 2c8cb70..3aa99d7 100644 --- a/meowpp/oo/ObjBase.h +++ b/meowpp/oo/ObjBase.h @@ -1,6 +1,8 @@ #ifndef oo_ObjBase_H__ #define oo_ObjBase_H__ +#include <cstdio> + #include <typeinfo> #include <string> @@ -11,7 +13,11 @@ namespace meow{ public: virtual ~ObjBase(){ } // - virtual ObjBase* create() const = 0; + virtual bool read (FILE* f, bool bin, unsigned int fg){ return false; } + virtual bool write(FILE* f, bool bin, unsigned int fg){ return false; } + // + virtual ObjBase* create() const{ return NULL; } + // virtual char const* ctype() const{ static char const* ptr = typeid(*this).name(); return ptr; diff --git a/meowpp/oo/ObjPort.h b/meowpp/oo/ObjPort.h new file mode 100644 index 0000000..b9baf0c --- /dev/null +++ b/meowpp/oo/ObjPort.h @@ -0,0 +1,18 @@ +#ifndef oo_ObjPort_H__ +#define oo_ObjPort_H__ + +#include "ObjBase.h" + +#include <cstdio> + +namespace meow{ + template<size_t sid> + class ObjPort{ + public: + static ObjBase* read (FILE* __f, bool __binary); + static bool write(FILE* __f, bool __binary, + ObjBase* __obj, unsigned int __fg); + }; +} + +#endif // oo_ObjPort_H__ diff --git a/meowpp/oo/ObjPort.hpp b/meowpp/oo/ObjPort.hpp new file mode 100644 index 0000000..d458adf --- /dev/null +++ b/meowpp/oo/ObjPort.hpp @@ -0,0 +1,47 @@ +#include "ObjPort.h" + +#include "ObjSelector.h" +#include "ObjBase.h" + +#include <cstdio> + +namespace meow{ + template<size_t sid> + inline ObjPort::ObjBase* read(FILE* __f, bool __binary){ + char name[1024]; + unsigned int fg; + if(__binary){ + size_t len; + if(fread(&len, sizeof(size_t), 1, __f) < 1) return NULL; + if(fread(name, sizeof(char), len, __f) < len) return NULL; + if(fread(&fg, sizeof(unsigned int), 1, __f) < 1) return NULL; + name[len] = '\0'; + }else{ + fscanf(__f, "%s %u", name, &fg); + } + ObjBase* ret = Selector<sid>(name); + if(ret->read(__f, __binary, fg) == false){ + delete ret; + ret = NULL; + } + return ret; + } + + + template<size_t sid> + inline ObjPort::bool write(FILE* __f, bool __binary, + ObjBase* __obj, unsigned int __fg){ + std::string name = Selector<sid>::find(__obj); + if(__binary){ + size_t len = name.size(); + if(fwrite(&len, sizeof(size_t), 1, __f) < 1) return false; + if(fwrite(name.c_str(), sizeof(char), len, __f) < len) return false; + if(fwrite(&__fg, sizeof(unsigned int), 1, __f) < len) return false; + }else{ + if(fprintf(__f, "%s %u\n", name.c_str(), __fg) < 2) return false; + } + return __obj->write(__f, __binary, __fg); + } +} + +#endif // oo_ObjPort_H__ diff --git a/meowpp/oo/ObjSelector.h b/meowpp/oo/ObjSelector.h index e70c496..58debcb 100644 --- a/meowpp/oo/ObjSelector.h +++ b/meowpp/oo/ObjSelector.h @@ -34,11 +34,22 @@ namespace meow{ funcs().erase(s); } } + static ObjBase const* access(std::string s){ + if(funcs().find(s) == funcs().end()) return NULL; + return funcs()[s]; + } static ObjBase* get(std::string s){ if(funcs().find(s) == funcs().end() || funcs()[s] == NULL) return NULL; return funcs()[s]->create(); } + static std::string find(ObjBase* o){ + for(Funcs::iterator it = funcs().begin(); it != funcs().end(); it++) + if(it->second != NULL && it->second->type() == o->type()){ + return it->first; + } + return std::string(); + } static Types lst(){ Types ret; for(Funcs::iterator it = funcs().begin(); it != funcs().end(); it++) |