Skip to content

Commit

Permalink
implemented a tristate
Browse files Browse the repository at this point in the history
  • Loading branch information
Nicholas O'Connor committed Mar 24, 2016
1 parent 9fb8f61 commit 40371e1
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Tilandis/Tilandis.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#include <Windows.h>
#include "rapidjson\document.h"
#include "resource.h"
#include "tristate.h"

// Home namespace
namespace Tilandis {
// TODO: tristates
Expand Down
1 change: 1 addition & 0 deletions Tilandis/Tilandis.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@
<ClInclude Include="resource.h" />
<ClInclude Include="Tilandis.h" />
<ClInclude Include="tilectl.h" />
<ClInclude Include="tristate.h" />
<ClInclude Include="Utility.h" />
</ItemGroup>
<ItemGroup>
Expand Down
3 changes: 3 additions & 0 deletions Tilandis/Tilandis.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@
<ClInclude Include="exceptions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="tristate.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Tilandis.rc">
Expand Down
2 changes: 2 additions & 0 deletions Tilandis/tilectl.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#include "Tilandis.h"

104 changes: 104 additions & 0 deletions Tilandis/tristate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
/*
* Generic tristate object header
* Copyright © 2016 Nicholas O'Connor
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
* to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of
* the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
* THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
* (tristate.h is considered to be a separate project from whatever source code you happen to have found it in.
* take it and use it regardless of what anyone else says.)
*/

#pragma once
#ifndef __TRISTATE_H
#define __TRISTATE_H

// Generic tristate object.
enum tristate {
False,
True,
Mixed
};

tristate operator==(tristate& lhs, bool& rhs) {
if (lhs == True) {
switch (rhs) {
case true:
return True;
case false:
return False;
}
} else if (lhs == False) {
switch (rhs) {
case true:
return False;
case false:
return True;
}
} else { // Mixed
#ifdef TRISTATE_MIXED_IS_FALSE
switch (rhs) {
case true:
return False;
case false:
return True;
}
#else
switch (rhs) {
case true:
return True;
case false:
return False;
}
#endif
}
}

bool operator==(bool& lhs, tristate& rhs) {
if (rhs == True) {
switch (lhs) {
case true:
return True;
case false:
return False;
}
}
else if (rhs == False) {
switch (lhs) {
case true:
return False;
case false:
return True;
}
}
else { // Mixed
#ifdef TRISTATE_MIXED_IS_FALSE
switch (lhs) {
case true:
return False;
case false:
return True;
}
#else
switch (lhs) {
case true:
return True;
case false:
return False;
}
#endif
}
}

#endif // !__TRISTATE_H

0 comments on commit 40371e1

Please sign in to comment.