Panda3D
pnmFileType.cxx
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file pnmFileType.cxx
10  * @author drose
11  * @date 2000-06-15
12  */
13 
14 #include "pnmFileType.h"
15 
16 #include "string_utils.h"
17 #include "executionEnvironment.h"
18 #include "bamReader.h"
19 #include "bamWriter.h"
20 
21 using std::string;
22 
23 bool PNMFileType::_did_init_pnm = false;
24 TypeHandle PNMFileType::_type_handle;
25 
26 /**
27  *
28  */
29 PNMFileType::
30 PNMFileType() {
31 }
32 
33 /**
34  *
35  */
36 PNMFileType::
37 ~PNMFileType() {
38 }
39 
40 /**
41  * Returns the number of different possible filename extensions associated
42  * with this particular file type.
43  */
44 int PNMFileType::
45 get_num_extensions() const {
46  return 0;
47 }
48 
49 /**
50  * Returns the nth possible filename extension associated with this particular
51  * file type, without a leading dot.
52  */
53 string PNMFileType::
54 get_extension(int) const {
55  nassertr(false, string());
56  return string();
57 }
58 
59 /**
60  * Returns a suitable filename extension (without a leading dot) to suggest
61  * for files of this type, or empty string if no suggestions are available.
62  */
63 string PNMFileType::
65  if (get_num_extensions() > 0) {
66  return get_extension(0);
67  }
68  return string();
69 }
70 
71 /**
72  * Returns true if this particular file type uses a magic number to identify
73  * it, false otherwise.
74  */
76 has_magic_number() const {
77  return false;
78 }
79 
80 /**
81  * Returns true if the indicated "magic number" byte stream (the initial few
82  * bytes read from the file) matches this particular file type, false
83  * otherwise.
84  */
86 matches_magic_number(const string &) const {
87  return false;
88 }
89 
90 /**
91  * Allocates and returns a new PNMReader suitable for reading from this file
92  * type, if possible. If reading from this file type is not supported,
93  * returns NULL.
94  */
96 make_reader(std::istream *, bool, const string &) {
97  return nullptr;
98 }
99 
100 /**
101  * Allocates and returns a new PNMWriter suitable for reading from this file
102  * type, if possible. If writing files of this type is not supported, returns
103  * NULL.
104  */
106 make_writer(std::ostream *, bool) {
107  return nullptr;
108 }
109 
110 /**
111  * Initializes the underlying PNM library, if it has not already been
112  * initialized. This should be called by every implementation of
113  * make_reader() and make_writer(), to ensure that the library is properly
114  * initialized before any I/O is attempted.
115  */
116 void PNMFileType::
117 init_pnm() {
118  if (!_did_init_pnm) {
119  _did_init_pnm = true;
120 
121  // No reason to do anything here nowadays.
122  }
123 }
124 
125 /**
126  * Fills the indicated datagram up with a binary representation of the current
127  * object, in preparation for writing to a Bam file.
128  *
129  * None of the particular PNMFileType objects store any extra data--at least,
130  * not yet--so we just define this up here to do nothing.
131  */
134 }
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
Definition: bamWriter.h:63
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition: datagram.h:38
virtual bool has_magic_number() const
Returns true if this particular file type uses a magic number to identify it, false otherwise.
Definition: pnmFileType.cxx:76
get_suggested_extension
Returns a suitable filename extension (without a leading dot) to suggest for files of this type,...
Definition: pnmFileType.h:49
virtual void write_datagram(BamWriter *writer, Datagram &datagram)
Fills the indicated datagram up with a binary representation of the current object,...
virtual PNMReader * make_reader(std::istream *file, bool owns_file=true, const std::string &magic_number=std::string())
Allocates and returns a new PNMReader suitable for reading from this file type, if possible.
Definition: pnmFileType.cxx:96
get_num_extensions
Returns the number of different possible filename extensions associated with this particular file typ...
Definition: pnmFileType.h:44
virtual PNMWriter * make_writer(std::ostream *file, bool owns_file=true)
Allocates and returns a new PNMWriter suitable for reading from this file type, if possible.
get_extension
Returns the nth possible filename extension associated with this particular file type,...
Definition: pnmFileType.h:44
virtual bool matches_magic_number(const std::string &magic_number) const
Returns true if the indicated "magic number" byte stream (the initial few bytes read from the file) m...
Definition: pnmFileType.cxx:86
This is an abstract base class that defines the interface for reading image files of various types.
Definition: pnmReader.h:27
This is an abstract base class that defines the interface for writing image files of various types.
Definition: pnmWriter.h:27
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.