#ifndef SpaceH #define SpaceH ////////////////////////////////////////////////////////////////////// // // Space.h: interface for the Space base class. // ////////////////////////////////////////////////////////////////////// #include #include #include class Space { protected: std::vector SizeArray; // Size of every dimension std::vector MultArray; // Multiplier for each dimension public: Space(); Space(const std::vector& ASizeArray, std::vector AMultArray); Space(const Space &); Space(const std::vector& 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 & SI); // длина минимального пути между двумя процессорами long GetDistance(long LI1, long LI2); Space& operator= (const Space &x); // Вычисляет координаты в данном пространстве по линейному индексу // (Space Index - SI) void GetSI(long LI, std::vector & 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