67 lines
1.7 KiB
C++
67 lines
1.7 KiB
C++
#ifndef SpaceH
|
|
#define SpaceH
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Space.h: interface for the Space base class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include <vector>
|
|
#include <algorithm>
|
|
#include <fstream>
|
|
|
|
class Space {
|
|
protected:
|
|
std::vector<long> SizeArray; // Size of every dimension
|
|
std::vector<long> MultArray; // Multiplier for each dimension
|
|
public:
|
|
Space();
|
|
Space(const std::vector<long>& ASizeArray, std::vector<long> AMultArray);
|
|
Space(const Space &);
|
|
Space(const std::vector<long>& ASizeArray);
|
|
~Space();
|
|
|
|
long GetNumInDim(long LI, long dimNum);
|
|
long GetCenterLI();
|
|
|
|
// ôóíêöèÿ âîçâðàùàåò ëèíåéíûé èíäåêñ ïðîöåññîðà, êîòîðûé ñìåù¸í íà shift
|
|
// ïî èçìåðåíèþ dim îò äàííîãî ïðîöåññîðà çàäàííîãî ëèíåéíûì èíäåêñîì
|
|
long GetSpecLI(long LI, long dim, int shift);
|
|
|
|
// Âû÷èñëÿåò ëèíåéííûé èíäåêñ ïî êîîðäèíàòàì â äàííîì ïðîñòðàíñòâå
|
|
long GetLI(const std::vector<long> & SI);
|
|
|
|
// äëèíà ìèíèìàëüíîãî ïóòè ìåæäó äâóìÿ ïðîöåññîðàìè
|
|
long GetDistance(long LI1, long LI2);
|
|
|
|
Space& operator= (const Space &x);
|
|
|
|
// Âû÷èñëÿåò êîîðäèíàòû â äàííîì ïðîñòðàíñòâå ïî ëèíåéíîìó èíäåêñó
|
|
// (Space Index - SI)
|
|
void GetSI(long LI, std::vector<long> & SI);
|
|
|
|
// Âîçâðàùàåò ëèíåéíûé ðàçìåð ïðîñòðàíñòâà
|
|
long GetLSize();
|
|
|
|
// inline long GetRank() { return Rank; }
|
|
|
|
long GetSize(long AAxis); // èçìåðåíèÿ ñ 1
|
|
long GetMult(long AAxis); // èçìåðåíèÿ ñ 1
|
|
|
|
unsigned int Rank() { return SizeArray.size(); }
|
|
|
|
#ifdef P_DEBUG
|
|
friend std::ostream& operator << (std::ostream& os, const Space& s);
|
|
#endif
|
|
|
|
};
|
|
|
|
#if defined (__GNUG__) && (__GNUC__ < 3)
|
|
inline long abs(long x)
|
|
{
|
|
return (x < 0) ? (-x) : (x);
|
|
};
|
|
#endif
|
|
|
|
#endif
|