Skip to content
Snippets Groups Projects
Commit 21e5f5db authored by Radek Hušek's avatar Radek Hušek Committed by Radek Hušek
Browse files

Add compile time option SAVE_MEMORY

parent df13f946
Branches
No related tags found
No related merge requests found
default: groupConnectivity.so clean_obj
groupConnectivity.so: groupConnectivity.pyx group-connectivity.h setup.py
groupConnectivity.so: groupConnectivity.pyx group-connectivity.h setup.py compileTimeOptions.h
python setup.py build_ext
cp build/lib*/groupConnectivity.so .
......
#ifndef __COMPILE_TIME_OPTIONS_H__
#define __COMPILE_TIME_OPTIONS_H__
// bool; use vector<bool> instead of vector<size_t> for classes
#ifndef SAVE_MEMORY
#define SAVE_MEMORY 0
#endif
#endif
#ifndef __GROUP_CONNECTIVITY_H__
#define __GROUP_CONNECTIVITY_H__
#include "compileTimeOptions.h"
namespace Ring {
#define MakeRing(Name, Size, Plus, Negate, Multiply, One) \
......@@ -24,7 +26,12 @@ MakeRing(Z2_2, 4, a^b, a, a&b, 3);
struct AbstractTester {
bool isConnected;
std::vector<size_t> classes;
#if SAVE_MEMORY
typedef std::vector<bool> ClassesType;
#else
typedef std::vector<size_t> ClassesType;
#endif
ClassesType classes;
typedef int EdgeId;
typedef int DirectedEdgeId;
......@@ -75,7 +82,7 @@ struct Tester : public AbstractTester {
size_t num_classes = 1;
edges_ = spanningTree.size();
while (edges_-- > 0) num_classes *= Ring::size;
std::vector<size_t> C(num_classes, 0);
ClassesType C(num_classes, 0);
C.swap(classes);
for (auto e : spanningTree)
......@@ -127,7 +134,13 @@ struct Tester : public AbstractTester {
virtual std::vector<size_t> getClasses() {
#if SAVE_MEMORY
std::vector<size_t> ret(classes.size());
for (size_t i = 0; i < classes.size(); i++) ret[i] = classes[i];
return ret;
#else
return classes;
#endif
}
......@@ -135,9 +148,13 @@ struct Tester : public AbstractTester {
Mapping forb(edges, 0);
for (size_t i = 0; i < numForb; i++)
#if SAVE_MEMORY
classes[pack(cannonize(unpack(i, forb)))] = true;
#else
classes[pack(cannonize(unpack(i, forb)))]++;
#endif
for (auto &c : classes) if (!c) return (isConnected = false);
for (const auto &c : classes) if (!c) return (isConnected = false);
return (isConnected = true);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment