summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libadhocutil/buffer.cpp26
-rw-r--r--libadhocutil/buffer.h17
-rw-r--r--libadhocutil/fprintbf.h3
3 files changed, 21 insertions, 25 deletions
diff --git a/libadhocutil/buffer.cpp b/libadhocutil/buffer.cpp
index c7dda56..934aee5 100644
--- a/libadhocutil/buffer.cpp
+++ b/libadhocutil/buffer.cpp
@@ -134,10 +134,10 @@ Buffer::append(const char * str, CStringHandling h)
{
if (str && *str) {
if (h == Copy) {
- content.push_back(new StringFragment(str));
+ content.push_back(std::make_shared<StringFragment>(str));
}
else {
- content.push_back(new CStringFragment(str, h));
+ content.push_back(std::make_shared<CStringFragment>(str, h));
}
}
return *this;
@@ -148,10 +148,10 @@ Buffer::append(char * str, CStringHandling h)
{
if (str && *str) {
if (h == Copy) {
- content.push_back(new StringFragment(str));
+ content.push_back(std::make_shared<StringFragment>(str));
}
else {
- content.push_back(new CStringFragment(str, h));
+ content.push_back(std::make_shared<CStringFragment>(str, h));
}
}
return *this;
@@ -161,7 +161,7 @@ Buffer &
Buffer::append(const std::string & str)
{
if (!str.empty()) {
- content.push_back(new StringFragment(str));
+ content.push_back(std::make_shared<StringFragment>(str));
}
return *this;
}
@@ -182,7 +182,7 @@ Buffer::vappendf(const char * fmt, va_list args)
char * frag;
size_t len = vasprintf(&frag, fmt, args);
if (len > 0) {
- content.push_back(new CStringFragment(frag, Free, len));
+ content.push_back(std::make_shared<CStringFragment>(frag, Free, len));
}
else {
free(frag);
@@ -204,10 +204,10 @@ Buffer::clear()
return *this;
}
-boost::shared_ptr<boost::format>
+boost::format
Buffer::getFormat(const std::string & msgfmt)
{
- return boost::shared_ptr<boost::format>(new boost::format(msgfmt));
+ return boost::format(msgfmt);
}
void
@@ -257,9 +257,7 @@ void
Buffer::flatten() const
{
if (content.size() > 1) {
- auto f = new StringFragment(str());
- content.resize(1);
- content.front() = f;
+ content = { std::make_shared<StringFragment>(str()) };
}
}
@@ -282,16 +280,14 @@ Buffer::length() const
Buffer &
Buffer::operator=(const char * str)
{
- content.resize(1);
- content.front() = new StringFragment(str);
+ content = { std::make_shared<StringFragment>(str) };
return *this;
}
Buffer &
Buffer::operator=(const std::string & str)
{
- content.resize(1);
- content.front() = new StringFragment(str);
+ content = { std::make_shared<StringFragment>(str) };
return *this;
}
diff --git a/libadhocutil/buffer.h b/libadhocutil/buffer.h
index 1d99f22..d553c57 100644
--- a/libadhocutil/buffer.h
+++ b/libadhocutil/buffer.h
@@ -1,12 +1,10 @@
#ifndef ADHOCUTIL_BUFFER_H
#define ADHOCUTIL_BUFFER_H
-#include "intrusivePtrBase.h"
#include <string>
#include <vector>
#include <stdarg.h>
#include <boost/format.hpp>
-#include <boost/shared_ptr.hpp>
#include "visibility.h"
namespace AdHoc {
@@ -20,7 +18,7 @@ namespace std {
namespace AdHoc {
/// High-speed text buffer for easy creation of programatically created strings.
-class DLL_PUBLIC Buffer : public virtual IntrusivePtrBase {
+class DLL_PUBLIC Buffer {
public:
/** How should Buffer handle char * arguments? */
enum CStringHandling {
@@ -33,9 +31,9 @@ class DLL_PUBLIC Buffer : public virtual IntrusivePtrBase {
};
/// Pointer typedef.
- typedef boost::intrusive_ptr<Buffer> Ptr;
+ typedef std::shared_ptr<Buffer> Ptr;
/// Const pointer typedef.
- typedef boost::intrusive_ptr<const Buffer> CPtr;
+ typedef std::shared_ptr<const Buffer> CPtr;
/** Create an empty buffer */
Buffer();
@@ -90,7 +88,8 @@ class DLL_PUBLIC Buffer : public virtual IntrusivePtrBase {
template <typename ... Params>
Buffer & appendbf(const std::string & fmtstr, const Params & ... params)
{
- return appendbf(*getFormat(fmtstr), params...);
+ auto bf = getFormat(fmtstr);
+ return appendbf(bf, params...);
}
/** Append the given boost::format and arguments to the buffer. */
template <typename Param, typename ... Params>
@@ -109,13 +108,13 @@ class DLL_PUBLIC Buffer : public virtual IntrusivePtrBase {
std::string str() const;
/** Helper function to centralize the construction of boost::format instances. */
- static boost::shared_ptr<boost::format> getFormat(const std::string & msgfmt);
+ static boost::format getFormat(const std::string & msgfmt);
private:
Buffer & appendbf(boost::format & fmt);
void DLL_PRIVATE flatten() const;
- class DLL_PRIVATE FragmentBase : public virtual IntrusivePtrBase {
+ class DLL_PRIVATE FragmentBase {
public:
virtual ~FragmentBase() = 0;
@@ -157,7 +156,7 @@ class DLL_PUBLIC Buffer : public virtual IntrusivePtrBase {
const std::string buf;
};
- typedef boost::intrusive_ptr<FragmentBase> FragmentPtr;
+ typedef std::shared_ptr<FragmentBase> FragmentPtr;
typedef std::vector<FragmentPtr> Content;
mutable Content content;
};
diff --git a/libadhocutil/fprintbf.h b/libadhocutil/fprintbf.h
index a997fae..e3c16a7 100644
--- a/libadhocutil/fprintbf.h
+++ b/libadhocutil/fprintbf.h
@@ -15,7 +15,8 @@ DLL_PUBLIC FILE * fopen(const boost::filesystem::path & path, const char * mode)
template <typename ... Params>
size_t inline fprintbf(FILE * f, const std::string & fmt, const Params & ... p)
{
- return fprintbf(f, *AdHoc::Buffer::getFormat(fmt), p...);
+ auto bf = AdHoc::Buffer::getFormat(fmt);
+ return fprintbf(f, bf, p...);
}
template <typename Param, typename ... Params>