You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
4.0 KiB
186 lines
4.0 KiB
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield |
|
* |
|
* This library is open source and may be redistributed and/or modified under |
|
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or |
|
* (at your option) any later version. The full license is in LICENSE file |
|
* included with this distribution, and on the openscenegraph.org website. |
|
* |
|
* This library is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* OpenSceneGraph Public License for more details. |
|
*/ |
|
|
|
#ifndef OSGDB_PARAMETEROUTPUT |
|
#define OSGDB_PARAMETEROUTPUT 1 |
|
|
|
#include <osgDB/Output> |
|
|
|
namespace osgDB { |
|
|
|
class ParameterOutput |
|
{ |
|
public: |
|
|
|
ParameterOutput(Output& fw): |
|
_fw(fw), |
|
_numItemsPerLine(fw.getNumIndicesPerLine()), |
|
_column(0) {} |
|
|
|
ParameterOutput(Output& fw,int numItemsPerLine): |
|
_fw(fw), |
|
_numItemsPerLine(numItemsPerLine), |
|
_column(0) {} |
|
|
|
void begin() |
|
{ |
|
_fw.indent() << "{"<<std::endl; |
|
_fw.moveIn(); |
|
} |
|
|
|
void newLine() |
|
{ |
|
if (_column!=0) _fw << std::endl; |
|
_column = 0; |
|
} |
|
|
|
void end() |
|
{ |
|
if (_column!=0) _fw << std::endl; |
|
_fw.moveOut(); |
|
_fw.indent() << "}"<<std::endl; |
|
_column = 0; |
|
} |
|
|
|
template<class T> |
|
void write(const T& t) |
|
{ |
|
if (_column==0) _fw.indent(); |
|
|
|
_fw << t; |
|
|
|
++_column; |
|
if (_column==_numItemsPerLine) |
|
{ |
|
_fw << std::endl; |
|
_column = 0; |
|
} |
|
else |
|
{ |
|
_fw << " "; |
|
} |
|
|
|
} |
|
|
|
template<class Iterator> |
|
void write(Iterator first, Iterator last) |
|
{ |
|
for(Iterator itr=first; |
|
itr!=last; |
|
++itr) |
|
{ |
|
write(*itr); |
|
} |
|
|
|
} |
|
|
|
template<class Iterator> |
|
void writeAsInts(Iterator first, Iterator last) |
|
{ |
|
for(Iterator itr=first; |
|
itr!=last; |
|
++itr) |
|
{ |
|
write((int)*itr); |
|
} |
|
|
|
} |
|
|
|
|
|
protected: |
|
|
|
ParameterOutput& operator = (const ParameterOutput&) { return *this; } |
|
|
|
Output& _fw; |
|
int _numItemsPerLine; |
|
int _column; |
|
}; |
|
|
|
|
|
template<class Iterator> |
|
void writeArray(Output& fw, Iterator first, Iterator last,int noItemsPerLine=0) |
|
{ |
|
if (noItemsPerLine==0) noItemsPerLine=fw.getNumIndicesPerLine(); |
|
|
|
fw.indent() << "{"<<std::endl; |
|
fw.moveIn(); |
|
|
|
int column=0; |
|
|
|
for(Iterator itr=first; |
|
itr!=last; |
|
++itr) |
|
{ |
|
if (column==0) fw.indent(); |
|
|
|
fw << *itr; |
|
|
|
++column; |
|
if (column==noItemsPerLine) |
|
{ |
|
fw << std::endl; |
|
column = 0; |
|
} |
|
else |
|
{ |
|
fw << " "; |
|
} |
|
} |
|
if (column!=0) fw << std::endl; |
|
|
|
fw.moveOut(); |
|
fw.indent()<<"}"<<std::endl; |
|
|
|
} |
|
|
|
|
|
template<class Iterator> |
|
void writeArrayAsInts(Output& fw, Iterator first, Iterator last,int noItemsPerLine=0) |
|
{ |
|
if (noItemsPerLine==0) noItemsPerLine=fw.getNumIndicesPerLine(); |
|
|
|
fw.indent() << "{"<<std::endl; |
|
fw.moveIn(); |
|
|
|
int column=0; |
|
|
|
for(Iterator itr=first; |
|
itr!=last; |
|
++itr) |
|
{ |
|
if (column==0) fw.indent(); |
|
|
|
fw << (int)*itr; |
|
|
|
++column; |
|
if (column==noItemsPerLine) |
|
{ |
|
fw << std::endl; |
|
column = 0; |
|
} |
|
else |
|
{ |
|
fw << " "; |
|
} |
|
} |
|
if (column!=0) fw << std::endl; |
|
|
|
fw.moveOut(); |
|
fw.indent()<<"}"<<std::endl; |
|
|
|
} |
|
|
|
|
|
} |
|
|
|
#endif // __SG_OUTPUT_H
|
|
|