From b61ba34c302b53a6c3e00a29145df3bac78f1384 Mon Sep 17 00:00:00 2001 From: Victor Lopez Date: Mon, 4 Jun 2018 14:55:46 +0200 Subject: [PATCH] Implement CpuSet substract operation --- src/arch/unix-os/cpuset.hpp | 11 +++++++++++ tests/test/00_arch/unix-os/cpuset_00.cpp | 1 + 2 files changed, 12 insertions(+) diff --git a/src/arch/unix-os/cpuset.hpp b/src/arch/unix-os/cpuset.hpp index 3dd6748e5..81e044f59 100644 --- a/src/arch/unix-os/cpuset.hpp +++ b/src/arch/unix-os/cpuset.hpp @@ -67,6 +67,8 @@ class CpuSet // Default constructor CpuSet(): _mask() {} + CpuSet( int cpuid ): _mask() { set(cpuid); } + // Destructor ~CpuSet() {} @@ -105,6 +107,7 @@ class CpuSet friend CpuSet operator&( const CpuSet& lhs, const CpuSet& rhs ); friend CpuSet operator+( const CpuSet& lhs, const CpuSet& rhs ); friend CpuSet operator*( const CpuSet& lhs, const CpuSet& rhs ); + friend CpuSet operator-( const CpuSet& lhs, const CpuSet& rhs ); friend bool operator==( const CpuSet& lhs, const CpuSet& rhs ); friend bool operator!=( const CpuSet& lhs, const CpuSet& rhs ); @@ -235,6 +238,14 @@ inline CpuSet operator*( const CpuSet& lhs, const CpuSet& rhs ) return lhs & rhs; } +inline CpuSet operator-( const CpuSet& lhs, const CpuSet& rhs ) +{ + CpuSet result; + CPU_XOR( &result._mask, &lhs._mask, &rhs._mask ); + CPU_AND( &result._mask, &lhs._mask, &result._mask ); + return result; +} + inline bool operator==( const CpuSet& lhs, const CpuSet& rhs ) { return CPU_EQUAL( &lhs._mask, &rhs._mask ); diff --git a/tests/test/00_arch/unix-os/cpuset_00.cpp b/tests/test/00_arch/unix-os/cpuset_00.cpp index 4fd0cb419..d76da51b2 100644 --- a/tests/test/00_arch/unix-os/cpuset_00.cpp +++ b/tests/test/00_arch/unix-os/cpuset_00.cpp @@ -57,6 +57,7 @@ int main(int argc, char *argv[]) assert((set1 + set2).size()==4); /* 1111 */ assert((set1 & set2).size()==1); /* 0001 */ assert((set1 * set2).size()==1); /* 0001 */ + assert((set1 - set2).size()==2); /* 0110 */ // Compound assignment operators set2 = set1; /* 0111 */ -- GitLab