#pragma once namespace nall { view::view() { _string = nullptr; _data = ""; _size = 0; } view::view(const view& source) { if(this == &source) return; _string = nullptr; _data = source._data; _size = source._size; } view::view(view&& source) { if(this == &source) return; _string = source._string; _data = source._data; _size = source._size; source._string = nullptr; } view::view(const char* data) { _string = nullptr; _data = data; _size = -1; //defer length calculation, as it is often unnecessary } view::view(const char* data, uint size) { _string = nullptr; _data = data; _size = size; } view::view(const string& source) { _string = nullptr; _data = source.data(); _size = source.size(); } template view::view(P&&... p) { _string = new string{forward

(p)...}; _data = _string->data(); _size = _string->size(); } view::~view() { if(_string) delete _string; } auto view::operator=(const view& source) -> view& { if(this == &source) return *this; _string = nullptr; _data = source._data; _size = source._size; return *this; }; auto view::operator=(view&& source) -> view& { if(this == &source) return *this; _string = source._string; _data = source._data; _size = source._size; source._string = nullptr; return *this; }; view::operator const char*() const { return _data; } auto view::data() const -> const char* { return _data; } auto view::size() const -> uint { if(_size < 0) _size = strlen(_data); return _size; } }