[Liblas-commits] hg: Added file_ptr_stream, hpp with custom buffer and streams imp...

liblas-commits at liblas.org liblas-commits at liblas.org
Tue Aug 24 07:48:28 EDT 2010


changeset ec8b76f9bedb in /Volumes/Data/www/liblas.org/hg
details: http://hg.liblas.orghg?cmd=changeset;node=ec8b76f9bedb
summary: Added file_ptr_stream,hpp with custom buffer and streams implementation helpful to wrap FILE* with stream semantic.

diffstat:

 include/liblas/detail/file_ptr_stream.hpp |  113 ++++++++++++++++++++++++++++++
 1 files changed, 113 insertions(+), 0 deletions(-)

diffs (118 lines):

diff -r bb070c13d79e -r ec8b76f9bedb include/liblas/detail/file_ptr_stream.hpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/include/liblas/detail/file_ptr_stream.hpp	Tue Aug 24 12:52:25 2010 +0100
@@ -0,0 +1,113 @@
+/******************************************************************************
+ * $Id: lasspatialreference.hpp 1091 2009-03-10 20:17:35Z hobu $
+ *
+ * Project:  libLAS - http://liblas.org - A BSD library for LAS format data.
+ * Purpose:  LAS Spatial Reference class 
+ * Author:   Howard Butler, hobu.inc at gmail.com
+ *
+ ******************************************************************************
+ * Copyright (c) 2009, Howard Butler
+ *
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following 
+ * conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright 
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright 
+ *       notice, this list of conditions and the following disclaimer in 
+ *       the documentation and/or other materials provided 
+ *       with the distribution.
+ *     * Neither the name of the Martin Isenburg or Iowa Department 
+ *       of Natural Resources nor the names of its contributors may be 
+ *       used to endorse or promote products derived from this software 
+ *       without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
+ * OF SUCH DAMAGE.
+ ****************************************************************************/
+
+#ifndef LIBLAS_DETAIL_FILE_PTR_STREAM_HPP_INCLUDED
+#define LIBLAS_DETAIL_FILE_PTR_STREAM_HPP_INCLUDED
+
+#include <cstdio>
+#include <istream>
+#include <ostream>
+#include <streambuf>
+
+namespace liblas { namespace detail {
+
+class file_ptr_streambuf : public std::streambuf
+{
+public:
+
+    file_ptr_streambuf(FILE* fp) : std::streambuf() , fp(fp) {}
+
+protected:
+
+    virtual int overflow(int c)
+    {
+        return EOF != c ? std::fputc(c, fp) : EOF;
+    }
+
+    virtual int underflow()
+    {
+        int const c = std::getc(fp);
+        if (c != EOF)
+        {
+            std::ungetc(c, fp);
+        }
+        return c;
+    }
+
+    virtual int uflow()
+    {
+        return std::getc(fp);
+    }
+
+    virtual int pbackfail(int c)
+    {
+        return EOF != c ? std::ungetc(c, fp) : EOF;
+    }
+
+    virtual int sync()
+    {
+        return std::fflush(fp);
+    }
+
+private:
+    FILE* fp;
+};
+
+#pragma warning(push)
+#pragma warning(disable: 4355)
+
+class file_ptr_istream : private file_ptr_streambuf, public std::istream
+{
+public:
+    explicit file_ptr_istream(FILE* fp) : file_ptr_streambuf(fp), std::istream(this) {}
+};
+
+class file_ptr_ostream : private file_ptr_streambuf, public std::ostream
+{
+public:
+    explicit file_ptr_ostream(FILE* fp) : file_ptr_streambuf(fp), std::ostream(this) {}
+};
+
+#pragma warning(pop)
+
+}} //namespace liblas::detail
+
+#endif // LIBLAS_DETAIL_FILE_PTR_STREAM_HPP_INCLUDED
\ No newline at end of file


More information about the Liblas-commits mailing list