| 855 | typedef std::vector<int> FiberDataMaterialCollection; |
| 856 | |
| 857 | struct FiberSectionData |
| 858 | { |
| 859 | FiberSectionData() : fibers() {} |
| 860 | inline bool operator < (const FiberSectionData &other) const { |
| 861 | if (fibers.size() < other.fibers.size()) return true; |
| 862 | if (fibers.size() > other.fibers.size()) return false; |
| 863 | for (size_t i = 0; i < fibers.size(); i++) { |
| 864 | const mpco::element::FiberData &a = fibers[i]; |
| 865 | const mpco::element::FiberData &b = other.fibers[i]; |
| 866 | if (a < b) return true; |
| 867 | if (a > b) return false; |
| 868 | } |
| 869 | if (materials.size() < other.materials.size()) return true; |
| 870 | if (materials.size() > other.materials.size()) return false; |
| 871 | for (size_t i = 0; i < materials.size(); i++) { |
| 872 | int a = materials[i]; |
| 873 | int b = other.materials[i]; |
| 874 | if (a < b) return true; |
| 875 | if (a > b) return false; |
| 876 | } |
| 877 | return false; // equal |
| 878 | } |
| 879 | inline bool operator > (const FiberSectionData &other) const { |
| 880 | if (fibers.size() > other.fibers.size()) return true; |
| 881 | if (fibers.size() < other.fibers.size()) return false; |
| 882 | for (size_t i = 0; i < fibers.size(); i++) { |
| 883 | const mpco::element::FiberData &a = fibers[i]; |
| 884 | const mpco::element::FiberData &b = other.fibers[i]; |
| 885 | if (a > b) return true; |
| 886 | if (a < b) return false; |
| 887 | } |
| 888 | if (materials.size() > other.materials.size()) return true; |
| 889 | if (materials.size() < other.materials.size()) return false; |
| 890 | for (size_t i = 0; i < materials.size(); i++) { |
| 891 | int a = materials[i]; |
| 892 | int b = other.materials[i]; |
| 893 | if (a > b) return true; |
| 894 | if (a < b) return false; |
| 895 | } |
| 896 | return false; // equal |
| 897 | } |
| 898 | FiberDataCollection fibers; |
| 899 | FiberDataMaterialCollection materials; |
| 900 | }; |
| 901 | |
| 902 | struct ElemGaussPair |
| 903 | { |