7 #ifndef INCLUDED_IMF_PARTHELPER_H
8 #define INCLUDED_IMF_PARTHELPER_H
58 std::size_t
q=
name.rfind(
'.');
63 return name.substr(0,q);
69 std::size_t
q=
name.rfind(
'.');
74 return name.substr(q+1);
95 template<
typename T>
inline int
100 for(
T i=begin;i!=
end;i++)
107 i->internal_name=i->name;
117 if(i->view==heroView)
119 i->internal_name = i->name;
121 i->internal_name = i->view+
"."+i->name;
124 i->internal_name = lname+
"."+i->view+
"."+i->getSuffix();
134 std::map< std::string , std::set< std::string > > viewsInLayers;
135 for(
T i=begin;i!=
end;i++)
137 viewsInLayers[i->getLayer()].insert(i->view);
142 std::map< std::pair<std::string,std::string> ,
int > layerToPart;
146 for(std::map<
std::string , std::set< std::string > >::const_iterator
layer=viewsInLayers.begin();
150 bool layer_has_hero =
layer->second.find(heroView)!=
layer->second.end();
153 layerToPart[ std::make_pair(
layer->first,heroView) ] = partCount++;
158 for(std::set< std::string >::const_iterator
view=
layer->second.begin();
163 layerToPart[ std::make_pair(
layer->first,*
view) ] = partCount++;
171 for(
T i=begin;i!=
end;i++)
173 i->internal_name=i->name;
174 i->part_number = layerToPart[ std::make_pair(i->getLayer(),i->view) ];
187 template<
class T>
inline void
190 bool has_multiview=
false;
194 if(hasMultiView(file.
header(0)))
196 mview=multiView(file.
header(0));
201 for(
int p=0;p<file.
parts();p++)
#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT
GLsizei const GLchar *const * string
IMF_EXPORT Iterator begin()
IMF_EXPORT std::string removeViewName(const std::string &channel, const std::string &view)
GLdouble GLdouble GLdouble q
IMF_EXPORT Iterator end()
GLenum GLuint GLint GLint layer
IMF_EXPORT std::string viewFromChannelName(const std::string &channel, const StringVector &multiView)
std::string name
name of channel
std::string getSuffix() const
IMF_EXPORT ConstIterator()
int SplitChannels(const T &begin, const T &end, bool multipart=true, const std::string &heroView=std::string())
assigns individual channels to different parts based on their layer and view name input is an array...
GLuint const GLchar * name
int part_number
part number: updated by SplitChannels
std::string getLayer() const
std::string internal_name
name used in headers: in singlepart mode, may contain viewname
OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER typedef std::vector< std::string > StringVector
void GetChannelsInMultiPartFile(const MultiPartInputFile &file, T &chans)
#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
std::string view
view for channel
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.