guid: remove this module
Many asumptions failed under big endian, the code wasn't particularly robust, and there are no users.
This commit is contained in:
parent
e364b0855f
commit
449fd1d1ad
@ -112,8 +112,6 @@ UTIL_FILES = \
|
|||||||
geom/sphere.hpp \
|
geom/sphere.hpp \
|
||||||
geom/tri.cpp \
|
geom/tri.cpp \
|
||||||
geom/tri.hpp \
|
geom/tri.hpp \
|
||||||
guid.cpp \
|
|
||||||
guid.hpp \
|
|
||||||
hash.hpp \
|
hash.hpp \
|
||||||
hash/fwd.hpp \
|
hash/fwd.hpp \
|
||||||
hash/simple.hpp \
|
hash/simple.hpp \
|
||||||
|
218
guid.cpp
218
guid.cpp
@ -1,218 +0,0 @@
|
|||||||
/*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* Copyright 2011 Danny Robson <danny@nerdcruft.net>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "./guid.hpp"
|
|
||||||
|
|
||||||
#include "./debug.hpp"
|
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <iterator>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
using util::guid;
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
guid::guid (uint32_t _data1,
|
|
||||||
uint16_t _data2,
|
|
||||||
uint16_t _data3,
|
|
||||||
uint8_t _data4[8]):
|
|
||||||
data1 (_data1),
|
|
||||||
data2 (_data2),
|
|
||||||
data3 (_data3)
|
|
||||||
{
|
|
||||||
std::copy (_data4, _data4 + std::size (data4), data4);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
guid::guid (void)
|
|
||||||
{
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
guid::guid (const char *str) {
|
|
||||||
std::istringstream is (str);
|
|
||||||
is >> *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
guid::guid (const guid &rhs) {
|
|
||||||
*this = rhs;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
guid&
|
|
||||||
guid::operator= (const guid &rhs) {
|
|
||||||
data1 = rhs.data1;
|
|
||||||
data2 = rhs.data2;
|
|
||||||
data3 = rhs.data3;
|
|
||||||
std::copy (rhs.data4 + 0, rhs.data4 + std::size (rhs.data4), data4 + 0);
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
guid
|
|
||||||
guid::from_bytes (const uint8_t *bytes) {
|
|
||||||
guid g;
|
|
||||||
|
|
||||||
g.data1 = *reinterpret_cast<const uint32_t *> (bytes);
|
|
||||||
bytes += sizeof (g.data1);
|
|
||||||
|
|
||||||
g.data2 = *reinterpret_cast<const uint16_t *> (bytes);
|
|
||||||
bytes += sizeof (g.data2);
|
|
||||||
|
|
||||||
g.data3 = *reinterpret_cast<const uint16_t *> (bytes);
|
|
||||||
bytes += sizeof (g.data3);
|
|
||||||
|
|
||||||
for (signed i = 7; i >= 0; --i)
|
|
||||||
g.data4[i] = *bytes++;
|
|
||||||
|
|
||||||
return g;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
guid
|
|
||||||
guid::from_string (const char *bytes)
|
|
||||||
{ return guid (bytes); }
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
guid::type
|
|
||||||
guid::get_type (void) const {
|
|
||||||
// Top three bits signal the type
|
|
||||||
unsigned bits = data4[2] >> 5U;
|
|
||||||
|
|
||||||
switch (bits) {
|
|
||||||
case 0x0:
|
|
||||||
case 0x1:
|
|
||||||
case 0x2:
|
|
||||||
case 0x3: return NCS_BACKWARD;
|
|
||||||
|
|
||||||
case 0x4:
|
|
||||||
case 0x5: return STANDARD;
|
|
||||||
|
|
||||||
case 0x6: return COM_BACKWARD;
|
|
||||||
|
|
||||||
case 0x7: return RESERVED;
|
|
||||||
}
|
|
||||||
|
|
||||||
unreachable ();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
bool
|
|
||||||
guid::operator< (const guid &rhs) const {
|
|
||||||
if (data1 != rhs.data1)
|
|
||||||
return data1 < rhs.data1;
|
|
||||||
if (data2 != rhs.data2)
|
|
||||||
return data2 < rhs.data2;
|
|
||||||
if (data3 != rhs.data3)
|
|
||||||
return data3 < rhs.data3;
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < std::size (data4); ++i) {
|
|
||||||
if (data4[i] == rhs.data4[i])
|
|
||||||
return data4[i] < rhs.data4[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
// All equal, so not less than
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
bool
|
|
||||||
guid::operator== (const guid &rhs) const {
|
|
||||||
return data1 == rhs.data1 &&
|
|
||||||
data2 == rhs.data2 &&
|
|
||||||
data3 == rhs.data3 &&
|
|
||||||
data4[0] == rhs.data4[0] &&
|
|
||||||
data4[1] == rhs.data4[1] &&
|
|
||||||
data4[2] == rhs.data4[2] &&
|
|
||||||
data4[3] == rhs.data4[3] &&
|
|
||||||
data4[4] == rhs.data4[4] &&
|
|
||||||
data4[5] == rhs.data4[5] &&
|
|
||||||
data4[6] == rhs.data4[6] &&
|
|
||||||
data4[7] == rhs.data4[7];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
std::ostream&
|
|
||||||
operator<< (std::ostream &os, const guid &g) {
|
|
||||||
uint64_t data4_b = static_cast<uint64_t> (g.data4[0]) << 0u |
|
|
||||||
static_cast<uint64_t> (g.data4[1]) << 8u |
|
|
||||||
static_cast<uint64_t> (g.data4[2]) << 16u |
|
|
||||||
static_cast<uint64_t> (g.data4[3]) << 24u |
|
|
||||||
static_cast<uint64_t> (g.data4[4]) << 32u |
|
|
||||||
static_cast<uint64_t> (g.data4[5]) << 40u;
|
|
||||||
uint16_t data4_a = static_cast<uint16_t> (g.data4[6]) << 0u |
|
|
||||||
static_cast<uint16_t> (g.data4[7]) << 8u;
|
|
||||||
|
|
||||||
os << std::hex << std::setfill ('0')
|
|
||||||
<< std::setw (2 * sizeof (g.data1)) << g.data1 << "-"
|
|
||||||
<< std::setw (2 * sizeof (g.data2)) << g.data2 << "-"
|
|
||||||
<< std::setw (2 * sizeof (g.data3)) << g.data3 << "-"
|
|
||||||
<< std::setw (2 * 2) << data4_a << "-"
|
|
||||||
<< std::setw (2 * 6) << data4_b;
|
|
||||||
|
|
||||||
os << std::dec;
|
|
||||||
return os;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
std::istream&
|
|
||||||
operator>> (std::istream &is, guid &g) {
|
|
||||||
bool braces = '{' == is.peek ();
|
|
||||||
if (braces)
|
|
||||||
is.get ();
|
|
||||||
|
|
||||||
uint8_t dash1, dash2, dash3, dash4a;
|
|
||||||
uint16_t data4_a;
|
|
||||||
uint64_t data4_b;
|
|
||||||
|
|
||||||
is >> std::hex
|
|
||||||
>> g.data1 >> dash1
|
|
||||||
>> g.data2 >> dash2
|
|
||||||
>> g.data3 >> dash3
|
|
||||||
>> data4_a >> dash4a
|
|
||||||
>> data4_b;
|
|
||||||
|
|
||||||
uint64_t data4 = data4_b | static_cast<uint64_t> (data4_a) << 48u;
|
|
||||||
g.data4[0] = data4 & 0xFF; data4 >>= 8u;
|
|
||||||
g.data4[1] = data4 & 0xFF; data4 >>= 8u;
|
|
||||||
g.data4[2] = data4 & 0xFF; data4 >>= 8u;
|
|
||||||
g.data4[3] = data4 & 0xFF; data4 >>= 8u;
|
|
||||||
g.data4[4] = data4 & 0xFF; data4 >>= 8u;
|
|
||||||
g.data4[5] = data4 & 0xFF; data4 >>= 8u;
|
|
||||||
g.data4[6] = data4 & 0xFF; data4 >>= 8u;
|
|
||||||
g.data4[7] = data4 & 0xFF;
|
|
||||||
|
|
||||||
if (braces)
|
|
||||||
is.get ();
|
|
||||||
|
|
||||||
return is;
|
|
||||||
}
|
|
65
guid.hpp
65
guid.hpp
@ -1,65 +0,0 @@
|
|||||||
/*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* Copyright 2011 Danny Robson <danny@nerdcruft.net>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __UTIL_GUID_HPP
|
|
||||||
#define __UTIL_GUID_HPP
|
|
||||||
|
|
||||||
#include <cstdint>
|
|
||||||
#include <ostream>
|
|
||||||
#include <istream>
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
namespace util {
|
|
||||||
class guid {
|
|
||||||
public:
|
|
||||||
enum type {
|
|
||||||
NCS_BACKWARD, // 0xx: Network Computing System backward compatibility
|
|
||||||
STANDARD, // 10x: Standard
|
|
||||||
COM_BACKWARD, // 110: Microsoft Component Object Model backward compatibility
|
|
||||||
RESERVED // 111: Reserved for future use
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
guid (void);
|
|
||||||
|
|
||||||
public:
|
|
||||||
guid (uint32_t, uint16_t, uint16_t, uint8_t[8]);
|
|
||||||
explicit guid (const char *);
|
|
||||||
guid (const guid&);
|
|
||||||
|
|
||||||
guid& operator= (const guid&);
|
|
||||||
|
|
||||||
static guid from_bytes (const uint8_t *bytes);
|
|
||||||
static guid from_string (const char *bytes);
|
|
||||||
|
|
||||||
uint32_t data1;
|
|
||||||
uint16_t data2;
|
|
||||||
uint16_t data3;
|
|
||||||
uint8_t data4[8];
|
|
||||||
|
|
||||||
type get_type (void) const;
|
|
||||||
|
|
||||||
bool operator< (const guid&) const;
|
|
||||||
bool operator== (const guid&) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
std::istream& operator>> (std::istream&, guid&);
|
|
||||||
std::ostream& operator<< (std::ostream&, const guid&);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue
Block a user