sources/list.cpp

branch
protocol5
changeset 165
718a8c4df538
parent 163
5948441a1951
child 180
2e7225dbd9b2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sources/list.cpp	Sat Jul 23 12:27:03 2016 +0300
@@ -0,0 +1,99 @@
+/*
+	Copyright 2016 Teemu Piippo
+	All rights reserved.
+
+	Redistribution and use in source and binary forms, with or without
+	modification, are permitted provided that the following conditions
+	are met:
+
+	1. Redistributions of source code must retain the above copyright
+	   notice, this list of conditions and the following disclaimer.
+	2. Redistributions in binary form must reproduce the above copyright
+	   notice, this list of conditions and the following disclaimer in the
+	   documentation and/or other materials provided with the distribution.
+	3. Neither the name of the copyright holder nor the names of its
+	   contributors may be used to endorse or promote products derived from
+	   this software without specific prior written permission.
+
+	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+	"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+	TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+	PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
+	OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+	EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+	PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+	PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+	LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+	NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "list.h"
+#include "mystring.h"
+
+BEGIN_ZFC_NAMESPACE
+
+/*!
+ * \brief Finds a suitable string representation for the provided byte.
+ * \param byte Byte to represent.
+ * \returns the string representation for the byte.
+ */
+const char* representByte(unsigned char byte)
+{
+	static char buffer[8];
+
+	if (byte < 8)
+	{
+		buffer[0] = '\\';
+		buffer[1] = byte + '0';
+		buffer[2] = '\0';
+		return buffer;
+	}
+	else switch(byte)
+	{
+	case '\a': return "\\a";
+	case '\b': return "\\b";
+	case '\t': return "\\t";
+	case '\n': return "\\n";
+	case '\v': return "\\v";
+	case '\f': return "\\f";
+	case '\r': return "\\r";
+	case '\e': return "\\e";
+	case '"': return "\\\"";
+	case '\\': return "\\\\";
+	default:
+		if (isprint(byte))
+		{
+			buffer[0] = byte;
+			buffer[1] = '\0';
+			return buffer;
+		}
+		else
+		{
+			snprintf(buffer, sizeof buffer, "\\x%2x", byte);
+			return buffer;
+		}
+	}
+}
+
+/*!
+ * \brief Constructs a byte array from an initializer list containing bytes.
+ * \param initializerList List of bytes.
+ */
+ByteArray::ByteArray(std::initializer_list<unsigned char> initializerList) :
+	Vector<unsigned char>(initializerList) {}
+
+/*!
+ * \returns a quoted representation of the contents of the byte array.
+ */
+String ByteArray::quote() const
+{
+	String result;
+
+	for (unsigned char byte : *this)
+		result += representByte(byte);
+
+	return "\"" + result + "\"";
+}
+
+END_ZFC_NAMESPACE

mercurial