Added ZString.c_str() function; Added MStrin operator=.
This commit is contained in:
parent
2a4fc0ad6f
commit
287933f9ce
4
File.cpp
4
File.cpp
@ -27,6 +27,10 @@ namespace coreutils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File::File(coreutils::ZString &fileName, int mode, int authority) {
|
||||||
|
File(fileName.str(), mode, authority);
|
||||||
|
}
|
||||||
|
|
||||||
File::~File() {
|
File::~File() {
|
||||||
close(fd);
|
close(fd);
|
||||||
setBufferSize(0);
|
setBufferSize(0);
|
||||||
|
2
File.h
2
File.h
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include "ZString.h"
|
||||||
|
|
||||||
///
|
///
|
||||||
/// File
|
/// File
|
||||||
@ -16,6 +17,7 @@ namespace coreutils {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
File(std::string fileName, int mode = O_RDONLY, int authority = 0664);
|
File(std::string fileName, int mode = O_RDONLY, int authority = 0664);
|
||||||
|
File(ZString &fileName, int mode = O_RDONLY, int authority = 0664);
|
||||||
~File();
|
~File();
|
||||||
void setBufferSize(size_t size);
|
void setBufferSize(size_t size);
|
||||||
void read();
|
void read();
|
||||||
|
@ -47,6 +47,15 @@ namespace coreutils {
|
|||||||
if(data)
|
if(data)
|
||||||
free(data);
|
free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MString& MString::operator=(coreutils::ZString& value) {
|
||||||
|
if(*this == value)
|
||||||
|
return *this;
|
||||||
|
int len = length;
|
||||||
|
setSize(length + value.getLength());
|
||||||
|
memcpy(data + len, value.getData(), value.getLength());
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
int MString::write(char ch) {
|
int MString::write(char ch) {
|
||||||
setSize(length + 1);
|
setSize(length + 1);
|
||||||
|
18
MString.h
18
MString.h
@ -7,7 +7,9 @@ namespace coreutils {
|
|||||||
|
|
||||||
///
|
///
|
||||||
/// Use the MString object when you need a permanent backing store on the heap
|
/// Use the MString object when you need a permanent backing store on the heap
|
||||||
/// for a ZString style functionality.
|
/// for a ZString style functionality. Because MString has a backing store we
|
||||||
|
/// added functionalities to build strings as well as the parsing power of the
|
||||||
|
/// ZString.
|
||||||
///
|
///
|
||||||
|
|
||||||
class MString : public ZString {
|
class MString : public ZString {
|
||||||
@ -48,8 +50,22 @@ namespace coreutils {
|
|||||||
|
|
||||||
~MString();
|
~MString();
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Assignment operator will copy data to backing store.
|
||||||
|
///
|
||||||
|
|
||||||
|
MString& operator=(coreutils::ZString& data);
|
||||||
|
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
|
||||||
int write(char ch);
|
int write(char ch);
|
||||||
|
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
|
||||||
int write(ZString &value);
|
int write(ZString &value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
19
ZString.cpp
19
ZString.cpp
@ -46,6 +46,11 @@ namespace coreutils {
|
|||||||
cursor = (char *)data.c_str();
|
cursor = (char *)data.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZString::~ZString() {
|
||||||
|
if(cdata)
|
||||||
|
free(cdata);
|
||||||
|
}
|
||||||
|
|
||||||
bool ZString::operator<(const ZString &valuex) const {
|
bool ZString::operator<(const ZString &valuex) const {
|
||||||
return (strncmp(cursor, valuex.cursor, (valuex.length <= length ? valuex.length : length)) < 0);
|
return (strncmp(cursor, valuex.cursor, (valuex.length <= length ? valuex.length : length)) < 0);
|
||||||
}
|
}
|
||||||
@ -101,24 +106,30 @@ namespace coreutils {
|
|||||||
return std::string(data, len);
|
return std::string(data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* ZString::c_str() {
|
||||||
|
cdata = (char *)malloc(length + 1);
|
||||||
|
strncpy(cdata, data, length);
|
||||||
|
cdata[length] = '\0';
|
||||||
|
return cdata;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<ZString> &ZString::split(std::string delimiter, size_t maxSize)
|
std::vector<ZString> &ZString::split(std::string delimiter, size_t maxSize)
|
||||||
{
|
{
|
||||||
coreutils::ZString zDelimiter((char *)delimiter.c_str(), delimiter.size());
|
coreutils::ZString zDelimiter((char *)delimiter.c_str(), delimiter.size());
|
||||||
return split(zDelimiter, maxSize);
|
return split(zDelimiter, maxSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ZString> &ZString::split(ZString &delimiter, size_t maxSize)
|
std::vector<ZString> &ZString::split(ZString &delimiter, size_t maxSize) {
|
||||||
{
|
|
||||||
list.clear();
|
list.clear();
|
||||||
if (length == 0) {
|
if (length == 0) {
|
||||||
list.push_back(ZString(""));
|
list.push_back(ZString(""));
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
maxSize = maxSize == 0 ? 255: maxSize;
|
||||||
char *end = data + length;
|
char *end = data + length;
|
||||||
char *pos = cursor;
|
char *pos = cursor;
|
||||||
while ((pos + delimiter.getLength()) <= end) {
|
while ((pos + delimiter.getLength()) <= end) {
|
||||||
if ((strncmp(pos, delimiter.getData(), delimiter.getLength()) == 0) && (maxSize > 0))
|
if ((strncmp(pos, delimiter.getData(), delimiter.getLength()) == 0) && (maxSize != 0))
|
||||||
{
|
{
|
||||||
list.push_back(ZString(cursor, pos - cursor));
|
list.push_back(ZString(cursor, pos - cursor));
|
||||||
cursor = pos + delimiter.getLength();
|
cursor = pos + delimiter.getLength();
|
||||||
|
13
ZString.h
13
ZString.h
@ -67,6 +67,12 @@ namespace coreutils {
|
|||||||
|
|
||||||
ZString(std::string string);
|
ZString(std::string string);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Destructor for the ZString.
|
||||||
|
///
|
||||||
|
|
||||||
|
~ZString();
|
||||||
|
|
||||||
///
|
///
|
||||||
/// A friend method used to write the value of the ZString from the cursor
|
/// A friend method used to write the value of the ZString from the cursor
|
||||||
/// point to an ostream using the << syntax.
|
/// point to an ostream using the << syntax.
|
||||||
@ -131,6 +137,12 @@ namespace coreutils {
|
|||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
|
||||||
|
char* c_str();
|
||||||
|
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
|
||||||
std::vector<ZString> &split(ZString &delimiter, size_t maxSize = 0);
|
std::vector<ZString> &split(ZString &delimiter, size_t maxSize = 0);
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -293,6 +305,7 @@ namespace coreutils {
|
|||||||
char *data;
|
char *data;
|
||||||
char *cursor;
|
char *cursor;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
char *cdata = NULL;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<ZString> list;
|
std::vector<ZString> list;
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user