/*
- * Copyright (C) 2005-2011 Team XBMC
- * http://www.xbmc.org
+ * Copyright (C) 2005-2013 Team XBMC
+ * http://xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- * http://www.gnu.org/copyleft/gpl.html
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
*
*/
#pragma once
-#include <sys/time.h>
-#include <assert.h>
-
namespace XbmcThreads
{
/**
inline NonCopyable() {}
};
- inline unsigned long long currentTimeMillis()
+ /**
+ * This will create a new predicate from an old predicate P with
+ * inverse truth value. This predicate is safe to use in a
+ * TightConditionVariable<P>
+ */
+ template <class P> class InversePredicate
{
- struct timeval tv;
- int result = gettimeofday(&tv,NULL);
- assert(result == 0);
- unsigned long long ret = (unsigned long long)tv.tv_sec * (unsigned long long)1000;
- ret += (unsigned long long)tv.tv_usec / (unsigned long long)1000;
- return ret;
- }
+ P predicate;
+
+ public:
+ inline InversePredicate(P predicate_) : predicate(predicate_) {}
+ inline InversePredicate(const InversePredicate<P>& other) : predicate(other.predicate) {}
+ inline InversePredicate<P>& operator=(InversePredicate<P>& other) { predicate = other.predicate; }
+
+ inline bool operator!() const { return !(!predicate); }
+ };
+
}
+