#include "types.h"
-bool ParseArcs(const char * str, size_t length, unsigned * a, size_t * pos)
+namespace
+{
+
+bool ParseArcs(const char * str, ptrdiff_t length, unsigned * a, size_t * pos);
+bool StringToArcs(const char * str, size_t length, std::vector<unsigned> & arcs);
+bool AppendToArcs(const char * str, size_t length, std::vector<unsigned> & arcs);
+
+bool ParseArcs(const char * str, ptrdiff_t length, unsigned * a, size_t * pos)
{
if (length == 0)
return false;
while ((left - str) < length)
{
char * pos = NULL;
- unsigned arc = strtoul(left, &pos, 10);
+ unsigned arc = static_cast<unsigned int>(strtoul(left, &pos, 10));
if (pos == left)
return false;
a[arcPos++] = arc;
return true;
}
+}
+
OID::OID(const std::string & str)
+ : arcs()
{
if (!StringToArcs(str.c_str(), str.length(), arcs))
throw std::runtime_error("Invalid oid");
}
OID::OID(const char * str, size_t length)
+ : arcs()
{
if (!StringToArcs(str, length, arcs))
throw std::runtime_error("Invalid oid");
}
OID::OID(const unsigned * a, size_t length)
+ : arcs()
{
std::vector<unsigned> newArcs(a, a + length);
arcs.swap(newArcs);
}
OID::OID(OBJECT_IDENTIFIER_t * oid)
+ : arcs()
{
unsigned a[1024];
int count = OBJECT_IDENTIFIER_get_arcs(oid, a, sizeof(a[0]), 1024);
void OID::ToOID(OBJECT_IDENTIFIER_t * oid) const
{
-OBJECT_IDENTIFIER_set_arcs(oid, &arcs.front(), sizeof(unsigned), arcs.size());
+OBJECT_IDENTIFIER_set_arcs(oid, &arcs.front(), sizeof(unsigned), static_cast<unsigned int>(arcs.size()));
}
OID & OID::operator=(const OID & rvalue)