ubyte array changing values between calls? Possible bug?

Gary Willoughby dev at nomad.so
Fri Dec 13 08:37:50 PST 2013


I have the following code which is massively simplified from a 
larger type. The problem occurs between assigning the value to 
the type and retrieving it.

The value is assigned through opAssign and the assert passes. 
When using a property to retrieve the same data the assert fails!

import std.bitmanip;
import std.stdio;
import std.traits;

struct IpAddress
{
	private ubyte[] _octets;

	this(uint value)
	{
		this.opAssign(value);
	}

	public @property ubyte[] data()
	{
		assert(this._octets == [1, 2, 3, 4]);
		return this._octets;
	}

	public void opAssign(uint value)
	{
		this._octets = value.nativeToBigEndian();
		assert(this._octets == [1, 2, 3, 4]);
	}
}

unittest
{
	auto ipAddress = IpAddress(0x01020304);
	assert(ipAddress.data == [1, 2, 3, 4]);
}

Any ideas why?

On a side note i also expected nativeToBigEndian to byte flip the 
hex literal, no idea why it hasn't, it's been a long day... I'm 
using MacOSX (Intel).

Compiled with: rdmd --force -de -debug -main -property -unittest 
-w file.d


More information about the Digitalmars-d-learn mailing list