added header files for String and StringValue
This commit is contained in:
parent
7ee0ebcfac
commit
9311aa6938
41
String.h
Normal file
41
String.h
Normal file
@ -0,0 +1,41 @@
|
||||
#pragma once
|
||||
#include <iostream>
|
||||
#include "StringValue.h"
|
||||
|
||||
|
||||
|
||||
/* Design decisions:
|
||||
* - Everything related to ref-counting is the responsibility of the StringValue class
|
||||
* - Anything dynamically allocated is owned (and thus once deleted) by the StringValue class
|
||||
* (including itself -- this is possible because of the reference counting mechanism) */
|
||||
class String
|
||||
{
|
||||
private:
|
||||
|
||||
StringValue* _str;
|
||||
|
||||
public:
|
||||
|
||||
String();
|
||||
String(const char*);
|
||||
String(const String&);
|
||||
String& operator=(String);
|
||||
String(String&&);
|
||||
~String();
|
||||
|
||||
friend void swap(String&, String&) noexcept;
|
||||
String operator+(const String&) const;
|
||||
String& operator+=(const String&);
|
||||
String operator+(char) const;
|
||||
String& operator+=(char);
|
||||
bool operator==(const String&) const;
|
||||
const char& operator[](size_t) const;
|
||||
char& operator[](size_t);
|
||||
|
||||
size_t size() const; // does not include null-terminator
|
||||
const char* c_str() const;
|
||||
|
||||
friend std::istream& operator>>(std::istream&, String&);
|
||||
};
|
||||
|
||||
std::ostream& operator<<(std::ostream&, const String&);
|
31
StringValue.h
Normal file
31
StringValue.h
Normal file
@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
|
||||
/* This class claims ownership of:
|
||||
*
|
||||
* - The char* passed to it in its ctor
|
||||
* - Itself (sounds funny) -> When no longer referenced the object deletes it's own memory,
|
||||
* therefore objects from this class should only be constructed
|
||||
* via operator new. This might seem like an odd design choice,
|
||||
* but */
|
||||
|
||||
class StringValue
|
||||
{
|
||||
private:
|
||||
|
||||
char* _data;
|
||||
size_t _size; // with null-terminator
|
||||
size_t _refs;
|
||||
|
||||
public:
|
||||
|
||||
StringValue(char* data);
|
||||
void operator++();
|
||||
void operator--();
|
||||
const char& operator[](size_t index) const;
|
||||
char& operator[](size_t index);
|
||||
operator const char*() const;
|
||||
size_t size() const;
|
||||
};
|
Loading…
Reference in New Issue
Block a user