mirror of
https://github.com/projectM-visualizer/projectm.git
synced 2026-03-06 15:35:04 +00:00
embeded traversal templates into Common.hpp
git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/personal/carm/represet@1157 6778bc44-b910-0410-a7a0-be141de4315d
This commit is contained in:
@ -1,68 +0,0 @@
|
||||
#ifndef PROJECTM_ALGORITHMS_HPP
|
||||
#define PROJECTM_ALGORITHMS_HPP
|
||||
#include <cassert>
|
||||
/// A collection of algorithms generically written over map style containers
|
||||
namespace Algorithms
|
||||
{
|
||||
|
||||
template <class TraverseFunctor, class Container>
|
||||
void traverse(Container & container)
|
||||
{
|
||||
|
||||
TraverseFunctor functor;
|
||||
|
||||
for (typename Container::iterator pos = container.begin(); pos != container.end(); ++pos)
|
||||
{
|
||||
assert(pos->second);
|
||||
functor(pos->second);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
template <class TraverseFunctor, class Container>
|
||||
void traverseVector(Container & container)
|
||||
{
|
||||
|
||||
TraverseFunctor functor;
|
||||
|
||||
for (typename Container::iterator pos = container.begin(); pos != container.end(); ++pos)
|
||||
{
|
||||
assert(*pos);
|
||||
functor(*pos);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
template <class TraverseFunctor, class Container>
|
||||
void traverse(Container & container, TraverseFunctor & functor)
|
||||
{
|
||||
|
||||
for (typename Container::iterator pos = container.begin(); pos != container.end(); ++pos)
|
||||
{
|
||||
assert(pos->second);
|
||||
functor(pos->second);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace TraverseFunctors
|
||||
{
|
||||
template <class Data>
|
||||
class DeleteFunctor
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
void operator() (Data * data)
|
||||
{
|
||||
assert(data);
|
||||
delete(data);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
#endif
|
||||
@ -16,10 +16,8 @@
|
||||
/* Loads a builtin function */
|
||||
#include "BuiltinFuncs.hpp"
|
||||
#include <string>
|
||||
#include "Algorithms.hpp"
|
||||
#include <iostream>
|
||||
#include "fatal.h"
|
||||
using namespace Algorithms;
|
||||
|
||||
std::map<std::string, Func*> BuiltinFuncs::builtin_func_tree;
|
||||
|
||||
@ -133,7 +131,7 @@ int BuiltinFuncs::init_builtin_func_db() {
|
||||
Generally, do this on projectm exit */
|
||||
int BuiltinFuncs::destroy_builtin_func_db() {
|
||||
|
||||
traverse<TraverseFunctors::DeleteFunctor<Func> >(builtin_func_tree);
|
||||
traverse<TraverseFunctors::Delete<Func> >(builtin_func_tree);
|
||||
|
||||
builtin_func_tree.clear();
|
||||
|
||||
|
||||
@ -2,13 +2,11 @@
|
||||
#include "fatal.h"
|
||||
#include "BuiltinParams.hpp"
|
||||
#include <cassert>
|
||||
#include "Algorithms.hpp"
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
#include "InitCondUtils.hpp"
|
||||
#include <sstream>
|
||||
|
||||
using namespace Algorithms;
|
||||
#include "Common.hpp"
|
||||
|
||||
BuiltinParams::BuiltinParams() {}
|
||||
|
||||
@ -106,7 +104,7 @@ std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), tolower);
|
||||
int BuiltinParams::destroy_builtin_param_db()
|
||||
{
|
||||
|
||||
Algorithms::traverse<TraverseFunctors::DeleteFunctor<Param> >(builtin_param_tree);
|
||||
traverse<TraverseFunctors::Delete<Param> >(builtin_param_tree);
|
||||
return PROJECTM_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -31,7 +31,6 @@
|
||||
#include "PresetFrameIO.hpp"
|
||||
#include "Param.hpp"
|
||||
#include <map>
|
||||
#include "Algorithms.hpp"
|
||||
|
||||
class BuiltinParams {
|
||||
|
||||
@ -69,8 +68,8 @@ public:
|
||||
int insert_builtin_param( Param *param );
|
||||
|
||||
template <class Fun>
|
||||
void traverse(Fun & fun) {
|
||||
Algorithms::traverse(builtin_param_tree, fun);
|
||||
void apply(Fun & fun) {
|
||||
traverse(builtin_param_tree, fun);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
#define COMMON_H
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <cassert>
|
||||
#ifdef _MSC_VER
|
||||
#define strcasecmp(s, t) _strcmpi(s, t)
|
||||
#endif
|
||||
@ -140,6 +140,64 @@ const std::string PROJECTM_FILE_EXTENSION("prjm");
|
||||
const std::string MILKDROP_FILE_EXTENSION("milk");
|
||||
const std::string PROJECTM_MODULE_EXTENSION("so");
|
||||
|
||||
template <class TraverseFunctor, class Container>
|
||||
void traverse(Container & container)
|
||||
{
|
||||
|
||||
TraverseFunctor functor;
|
||||
|
||||
for (typename Container::iterator pos = container.begin(); pos != container.end(); ++pos)
|
||||
{
|
||||
assert(pos->second);
|
||||
functor(pos->second);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
template <class TraverseFunctor, class Container>
|
||||
void traverseVector(Container & container)
|
||||
{
|
||||
|
||||
TraverseFunctor functor;
|
||||
|
||||
for (typename Container::iterator pos = container.begin(); pos != container.end(); ++pos)
|
||||
{
|
||||
assert(*pos);
|
||||
functor(*pos);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
template <class TraverseFunctor, class Container>
|
||||
void traverse(Container & container, TraverseFunctor & functor)
|
||||
{
|
||||
|
||||
for (typename Container::iterator pos = container.begin(); pos != container.end(); ++pos)
|
||||
{
|
||||
assert(pos->second);
|
||||
functor(pos->second);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace TraverseFunctors
|
||||
{
|
||||
template <class Data>
|
||||
class Delete
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
void operator() (Data * data)
|
||||
{
|
||||
assert(data);
|
||||
delete(data);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
inline std::string parseExtension(const std::string & filename) {
|
||||
|
||||
|
||||
@ -34,9 +34,7 @@
|
||||
#include "ParamUtils.hpp"
|
||||
#include "InitCondUtils.hpp"
|
||||
#include "wipemalloc.h"
|
||||
#include "Algorithms.hpp"
|
||||
|
||||
using namespace Algorithms;
|
||||
|
||||
|
||||
CustomShape::CustomShape() : Shape()
|
||||
@ -233,11 +231,11 @@ CustomShape::CustomShape ( int id ) : Shape()
|
||||
CustomShape::~CustomShape()
|
||||
{
|
||||
|
||||
traverseVector<TraverseFunctors::DeleteFunctor<PerFrameEqn> > ( per_frame_eqn_tree );
|
||||
traverse<TraverseFunctors::DeleteFunctor<InitCond> > ( init_cond_tree );
|
||||
traverse<TraverseFunctors::DeleteFunctor<Param> > ( param_tree );
|
||||
traverse<TraverseFunctors::DeleteFunctor<InitCond> > ( per_frame_init_eqn_tree );
|
||||
traverse<TraverseFunctors::DeleteFunctor<Param> > ( text_properties_tree );
|
||||
traverseVector<TraverseFunctors::Delete<PerFrameEqn> > ( per_frame_eqn_tree );
|
||||
traverse<TraverseFunctors::Delete<InitCond> > ( init_cond_tree );
|
||||
traverse<TraverseFunctors::Delete<Param> > ( param_tree );
|
||||
traverse<TraverseFunctors::Delete<InitCond> > ( per_frame_init_eqn_tree );
|
||||
traverse<TraverseFunctors::Delete<Param> > ( text_properties_tree );
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -534,6 +534,6 @@ void CustomWave::loadUnspecInitConds()
|
||||
{
|
||||
|
||||
InitCondUtils::LoadUnspecInitCond fun(this->init_cond_tree, this->per_frame_init_eqn_tree);
|
||||
Algorithms::traverse(param_tree, fun);
|
||||
traverse(param_tree, fun);
|
||||
}
|
||||
|
||||
|
||||
@ -71,15 +71,15 @@ MilkdropPreset::MilkdropPreset(const std::string & absoluteFilePath, const std::
|
||||
MilkdropPreset::~MilkdropPreset()
|
||||
{
|
||||
|
||||
Algorithms::traverse<Algorithms::TraverseFunctors::DeleteFunctor<InitCond> >(init_cond_tree);
|
||||
traverse<TraverseFunctors::Delete<InitCond> >(init_cond_tree);
|
||||
|
||||
Algorithms::traverse<Algorithms::TraverseFunctors::DeleteFunctor<InitCond> >(per_frame_init_eqn_tree);
|
||||
traverse<TraverseFunctors::Delete<InitCond> >(per_frame_init_eqn_tree);
|
||||
|
||||
Algorithms::traverse<Algorithms::TraverseFunctors::DeleteFunctor<PerPixelEqn> >(per_pixel_eqn_tree);
|
||||
traverse<TraverseFunctors::Delete<PerPixelEqn> >(per_pixel_eqn_tree);
|
||||
|
||||
Algorithms::traverseVector<Algorithms::TraverseFunctors::DeleteFunctor<PerFrameEqn> >(per_frame_eqn_tree);
|
||||
traverseVector<TraverseFunctors::Delete<PerFrameEqn> >(per_frame_eqn_tree);
|
||||
|
||||
Algorithms::traverse<Algorithms::TraverseFunctors::DeleteFunctor<Param> >(user_param_tree);
|
||||
traverse<TraverseFunctors::Delete<Param> >(user_param_tree);
|
||||
|
||||
for (PresetOutputs::cwave_container::iterator pos = customWaves.begin(); pos != customWaves.end(); ++pos)
|
||||
{
|
||||
@ -324,8 +324,8 @@ void MilkdropPreset::loadBuiltinParamsUnspecInitConds() {
|
||||
|
||||
InitCondUtils::LoadUnspecInitCond loadUnspecInitCond(this->init_cond_tree, this->per_frame_init_eqn_tree);
|
||||
|
||||
this->builtinParams.traverse(loadUnspecInitCond);
|
||||
Algorithms::traverse(user_param_tree, loadUnspecInitCond);
|
||||
this->builtinParams.apply(loadUnspecInitCond);
|
||||
traverse(user_param_tree, loadUnspecInitCond);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user