Todo List

Class Archon::Utilities::ArgumentException
After this exception has become an UnexpectedException some prior uses may have been rendered invalid.

Class Archon::Utilities::Atomic
Find a way to discriminate between i386 and i486+.

Class Archon::Utilities::Stream::BasicPipe< C >
It may be better for performance if we add a new Mutex to protect the pipe specific variables.

Class Archon::Render::Channel
This class should be moved into Pipe since no party except Pipe need to know about it.

Member Archon::Utilities::CharEnc::encode (wstring s, string encoding=UTF_8, bool fail=false)
Should utilize Autoconf's endianness detection macro.

Member Archon::Utilities::CharEnc::transcode (const char *&sourceBuffer, size_t &sourceBytesLeft, char *&targetBuffer, size_t &targetBytesLeft, bool fail=false)
Currently there will be one replacement character per byte of invalid input.

Member Archon::Utilities::CharEnc::transcode (const char *&sourceBuffer, size_t &sourceBytesLeft, char *&targetBuffer, size_t &targetBytesLeft, bool fail=false)
An even cooler scheme for handling invalid input would be to utilize the fact that UTF-8 input octets where the most significant bit is set and the next most significant bit is cleared should be skipped when synchronizing to the start of a character.

Member Archon::Utilities::Condition::select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, Time timeout)
On Linux (at the time of writing) the pselect system call has a race condition which allows it to miss a signal and thus sleep forever.

Member Archon::Display::ConnectionX11::~ConnectionX11 ()
Error handling

Member Archon::X3D::CustomFieldNode::addCustomField (Ref< CustomFieldBase >)
When a custom script field is named "foo" and has access type 'inputOutput' may it then be accessed with the names "set_foo" and "foo_changed", or is this behaivour restricted to conventional fields?

Member Archon::X3D::Cylinder::intersect (const Math::Ray3 &, double &dist) const
Is it correct to considder a cylinder with missing parts as non-solid and a cylinder with all parts enabled as a solid object? (I think I saw a confirmation of this somewhere in the spec -KKS)

Member Archon::Utilities::Web::DefaultClient::request (Ref< Request >)
The implicit DNS lookup in HTAnchor_findAddress should be avoided since it occurs inside the Libwww mutex.

Member Archon::Utilities::DFA::DFA (const NFA &, vector< set< int > > *stateSets=0, AnchorInfo *anchorInfo=0)
Explain further.

Member Archon::X3D::ElevationGrid::getNormalAndTexCoord (Vector3 hitPoint, int where, const Shape *, Vector3 *hitNormal, Vector2 *hitTexCoord) const
Do it!

Member Archon::X3D::ElevationGrid::intersect (const Math::Ray3 &, double &dist) const
Do it!

Member Archon::X3D::ElevationGrid::render (bool texture, const Shape *shape, const RenderConfig *)
Considder using glMapGrid and glEvalMesh to ease this job.

Class Archon::Utilities::Exception
Many exceptions derive virtually from because this class was marked as a virtual base class.

Class Archon::X3D::ExecutionContext::RealizedException
Should not this exception be thrown more frequently?

Class Archon::Utilities::FormatLibgif
For image file writing API see: libungif/util/rgb2gif.c.

Class Archon::Utilities::FormatLibjpeg
We might be missing todo's in anonymous namespaces in other files.

Class Archon::Utilities::FormatLibjpeg
How do we handle progressive display during loading? The issue is that of preventing concurrent reading and writing of the pixel data in a single image.

Class Archon::Utilities::FormatLibjpeg
Loading multiple images concurrently with progressive display needs more care.

Class Archon::Utilities::FormatLibjpeg
A different approach to displaying multiple concurrently loading images in a progressive manner is to have an extra thread that on regular intervals consults each image and transfers its pixel data onto the display device.

Class Archon::Utilities::FormatLibjpeg
This appraoch will fit well into the common paradigme of having a frame based rending thread with exclusive access to the rendering target (GLXContext).

Class Archon::Utilities::FormatLibjpeg
Considder adding the progressive flag to the Image API.

Class Archon::Utilities::FormatLibjpeg
Considder adding a prescaling setting to the image loading API.

Class Archon::Utilities::FormatLibjpeg
What's the deal about abbreviated datastreams.

Member Archon::Utilities::FormatLibjpeg::load (Ref< Stream::Reader > reader, Image::ProgressTracker *tracker, Logger *logger) const
Probably invalid for non-RGB color spaces.

Member Archon::Utilities::FormatLibpng::load (Ref< Stream::Reader > reader, Image::ProgressTracker *tracker, Logger *logger) const
Still some confusion between bytes and chars.

Member Archon::Utilities::FormatLibpng::load (Ref< Stream::Reader > reader, Image::ProgressTracker *tracker, Logger *logger) const
Read and somtimes transcode comments from image file.

Member Archon::Utilities::FormatLibpng::load (Ref< Stream::Reader > reader, Image::ProgressTracker *tracker, Logger *logger) const
Read the comment.

Member Archon::Utilities::FormatLibpng::save (Image image, Ref< Stream::Writer > writer, Image::ProgressTracker *tracker, Logger *logger) const
We need to verify that the combination of channels and bit-depth is acceptable for PNG.

Member Archon::Utilities::FormatLibpng::save (Image image, Ref< Stream::Writer > writer, Image::ProgressTracker *tracker, Logger *logger) const
Verify the correctness of comment compression.

Class Archon::Utilities::Image
Revisit all file format I/O for supporting bits-per-char greater than 8.

Class Archon::Utilities::Image
Considder adding a "Pixel operator(x, y)" where Pixel holds a pointer to the pixel byte(s).

Class Archon::Utilities::Image
Add fill and clear member functions.

Member Archon::X3D::IndexedFaceSet::intersect (const Math::Ray3 &, double &dist) const
Under the assumption that the polygon is convex, we may employ an optimization in that finding b < 0 ot a+b > 1 for any of the triangles we know that there can be no intersection.

Class Archon::X3D::Inline
It seems that this node type inherits from BoundedObject according to the specification.

Member Archon::Utilities::Job::Queue::cancel (Ref< Job >)
Terminating the thread causes everything to crash

Class Archon::Utilities::Lexer
Verify rules for no actions when no Actor is passed to Engine constructor and when no Context is passed to Lexer constructor.

Class Archon::Utilities::Lexer
Detect word boundaries and maybe only on demand ie.

Class Archon::X3D::Loader::MovieContents
Do it!

Class Archon::Utilities::LrParserBase
Considder including "lr_parser_methods.H" in this file.

Member Archon::Utilities::LrParserBase::parse (LexerBase &lexer, Context &c, Ref< const R > &result, Logger *l=0)
Parser errors must be handled properly.

Member Archon::X3D::NodeBase::add (const SequenceFieldBase *, Ref< const ValueBase >, Time)
Verify asyclic property

Member Archon::X3D::NodeBase::add (const SequenceFieldBase *, Ref< const ValueBase >, Time)
Add value type verification including checking the the concrete node type for conformance with the target field.

Member Archon::X3D::NodeBase::inject (const NodeFieldBase *, Ref< NodeBase > childNode, Time stamp)
Verify asyclic property

Member Archon::X3D::NodeBase::remove (const SequenceFieldBase *, Ref< const ValueBase >, Time)
Verify asyclic property

Member Archon::X3D::NodeBase::remove (const SequenceFieldBase *, Ref< const ValueBase >, Time)
Add value type verification.

Member Archon::X3D::NodeBase::set (const FieldBase *, const Event *)
Verify asyclic property

Member Archon::X3D::NodeBase::set (const FieldBase *, const Event *)
Add value type verification including checking the the concrete node type for conformance with the target field.

Member Archon::X3D::NodeBase::setAt (const SequenceFieldBase *, Ref< const ValueBase >, unsigned index, Time)
Verify asyclic property

Member Archon::X3D::NodeBase::setAt (const SequenceFieldBase *, Ref< const ValueBase >, unsigned index, Time)
Add value type verification including checking the the concrete node type for conformance with the target field.

Class Archon::X3D::NodeBase::RealizedException
Should not this exception be thrown more frequently?

Class Archon::Utilities::Options::FileAccessException
Should not this be an UnexpectedException?

Member Archon::X3D::XML::Parser::eat (const char *&s, Image &v, bool &more)
Needs to be implemented after completing new Image class.

Member Archon::X3D::XML::Parser::elementLookup (string name)
Should be changed so that initially a case sensitive search is done.

Member Archon::X3D::XML::Parser::parseValue (const char *s, vector< string > &v)
How is MFString represented in the XML encoding?

Member Archon::X3D::Parser::addRoute (string sourceNodeName, string sourceFieldName, string targetNodeName, string targetFieldName)
Somehow sombody must check the runtime types when sending nodes (SFNode/MFNode) across routes.

Member Archon::X3D::Parser::addRoute (string sourceNodeName, string sourceFieldName, string targetNodeName, string targetFieldName)
The below restriction is not mentioned in the X3D specification.

Member Archon::X3D::VRML::Parser::Context::extract (const RefAny &s, Uri &t)
Must we first check that ony 7-bit ascii chars are used?

Member Archon::X3D::VRML::Parser::Context::extract (const RefAny &s, Uri &t)
The default value is proberbly not right!

Member Archon::Render::Pipe::addChannel (Ref< Conductor >, Ref< View >, Ref< Display::Window >, Ref< Viewport >, Ref< Screen >, Ref< Eye >, Ref< Clip >)
Also check that the visual of the window equals the visual of the context.

Member Archon::Render::Pipe::addChannel (Ref< Conductor >, Ref< View >, Ref< Display::Window >, Ref< Viewport >, Ref< Screen >, Ref< Eye >, Ref< Clip >)
Also check that the Conductor is the same one that was used to create the context.

Class Archon::Utilities::PixelFormat
Make a formal format for string representation of pixel formats and a parser.

Member Archon::Utilities::PixelFormat::getExpandedFormat () const
FIXME: I belive it would be beneficial to remove the word-type concept from pixel format altogether and replace it with a bitsPerWord and an isFloat flag - that is it.

Class Archon::Utilities::Ref< T >
If we had a sufficiently large datatype for the reference count which we knew was atomic in read (sig_atomic_t), we could make an optimization in that if you read the count and find it to be < 2 then you need not aquire the lock since no other thread holds a Ref to the same object and there is no one who could access the object cocurently.

Class Archon::Utilities::Ref< T >
We should seriously considder making the Ref(T *) constructor explicit, since it actually is a relativly heavy operation and it might even be dangerous - for example when ref count has dropped to zero.

Class Archon::Utilities::Ref< T >
Considder recommending a scheme where Ref<>s can be automatically converted to plain pointers and that one should always use plain pointer arguments to functions.

Class Archon::Utilities::RefMap< T >
Do we really need to place this map in this file?? Currently it is here because it needs to be a friend of Ref since it needs to access refInc and refDec directly since it wants to prevent the overhead in expanding a vector of Refs.

Member Archon::Utilities::RefMap::operator() (unsigned long key) const
It is completely unacceptable that we do not get an exceptional signal when the passed key is not found in the map.

Class Archon::Utilities::Regex
Considder using a bitset<N> instead of vector<bool> for representing named character classes.

Class Archon::Utilities::Regex
Prevent users from using characters in range 0xE000 - 0xF8FF or even better think of a way to represent the anchor edges without using symbol values.

Class Archon::Utilities::Regex
Exclude newline characters from "." See http://www.unicode.org/unicode/reports/tr18/tr18-5.1.html#End%20Of%20Line

Class Archon::Utilities::ResourceException
After this exception has become an UnexpectedException some prior uses may have been rendered invalid.

Member Archon::X3D::Route::add (Ref< NodeBase > sourceNode, const FieldBase *sourceField, Ref< NodeBase > targetNode, const FieldBase *targetField)
The below injective node type restriction is not mentioned in the X3D specification and is probably violating it.

Member Archon::X3D::Route::add (Ref< NodeBase > sourceNode, const FieldBase *sourceField, Ref< NodeBase > targetNode, const FieldBase *targetField)
Self reference is probably not redundant and thus should probably not be ignored.

Class Archon::Utilities::Semaphore
Let's put this class into a file of its own.

Member Archon::X3D::SAI::Session::disposeSession ()
WE MUST MAKE SURE THAT THE APPLICATION IS NOT CONTACTED AT ALL AFTER THE DISPOSE_SESSION REQUEST HAS RETURNED TO THE APPLICATION.

Member Archon::X3D::SAI::Session::getRootGroup (CORBA::ULong)
This method is not in line with the X3D specification.

Member Archon::X3D::SAI::Session::launchApplicationScene (CORBA::ULong)
We really should lock the mutex first.

Member Archon::X3D::SAI::Session::setFieldValue (CORBA::ULong, CORBA::ULong, const x3d::sai::Value &)
Add value type verification including checking the the concrete node type for conformance with the target field.

Member Archon::X3D::SAI::Session::setFieldValueAdd (CORBA::ULong, CORBA::ULong, const x3d::sai::Value &)
Add value type verification including checking the the concrete node type for conformance with the target field.

Member Archon::X3D::SAI::Session::setFieldValueAt (CORBA::ULong, CORBA::ULong, CORBA::ULong, const x3d::sai::Value &)
Add value type verification including checking the the concrete node type for conformance with the target field.

Member Archon::X3D::SAI::Session::setFieldValueDel (CORBA::ULong, CORBA::ULong, const x3d::sai::Value &)
Add value type verification including checking the the concrete node type for conformance with the target field.

Member Archon::X3D::SAI::Session::setRootGroup (CORBA::ULong, CORBA::ULong)
This method is not in line with the X3D specification.

Member Archon::X3D::SAI::Session::unRegisterFieldInterest (CORBA::ULong, CORBA::ULong, CORBA::ULong)
MUST FLUSH OUTBOUND EVENT QUEUE WHERE AN UNREGISTER_FIELD_INTEREST REQUEST IS MADE.

Class Archon::X3D::Proxy::Session::Servant
Add support for the Session::withdrawApplicationScene call.

Member Archon::X3D::SimpleValueBase::getValuePtr () const =0
Get rid of it - should be really easy!

Class Archon::Utilities::StateException
After this exception has become an UnexpectedException some prior uses may have been rendered invalid.

Class Archon::X3D::SubSceneNode
We proberbly neeed to add a timestamp for the subScene variable to support Node::changedSince.

Member Archon::X3D::Text::intersect (const Math::Ray3 &, double &dist) const
The X3D specification says that "The Text node does not participate in collision detection", but does this mean that one cannot activate a pointing device sensor via the text node, or does it only refer to the fact that the text node will not interfear with your avatar when walking? (In fact, the latest version of the specification does not mention anything about collision detection or sensor interaction)

Member Archon::X3D::Text::render (bool texture, const Shape *shape, const RenderConfig *)
We can improve performance by doing nothing when the text will be back-face-culled.

Member Archon::X3D::Text::render (bool texture, const Shape *shape, const RenderConfig *)
Support vertical layout.

Member Archon::X3D::Text::render (bool texture, const Shape *shape, const RenderConfig *)
Support texturing through TextureNodes on text by utilizing OpenGLs multi texture support.

Member Archon::X3D::Text::render (bool texture, const Shape *shape, const RenderConfig *)
Support more than the ISO Latin-1 subset of the Unicode character set.

Member Archon::X3D::Text::render (bool texture, const Shape *shape, const RenderConfig *)
We must recognize the standard font family names "SERIF", "SANS" and "TYPEWRITER" and be able to map them to specific font faces that conform with the X3D specification.

Member Archon::X3D::Text::render (bool texture, const Shape *shape, const RenderConfig *)
Font glyphs could be packed much better in the texture than they are right now.

Member Archon::X3D::Text::render (bool texture, const Shape *shape, const RenderConfig *)
Apply kerning information.

Member Archon::X3D::Text::render (bool texture, const Shape *shape, const RenderConfig *)
Because the text rendering utilizes transparency for anti-aliasing purposes, the order of rendering starts to get important.

Member Archon::X3D::Text::render (bool texture, const Shape *shape, const RenderConfig *)
It might be a bad idea to delay rendering just because we need to load fonts.

Member Archon::X3D::Text::render (bool texture, const Shape *shape, const RenderConfig *)
Currently blending is enabled and then desabled here, but never touched elsewhere.Instead a decision must be made on how to handle transparency in general.

Class Archon::Utilities::Thread
Implement thread priority.

Class Archon::Utilities::Thread
The following is probably not safe: 'volatile bool terminateRequest;'.

Class Archon::Utilities::Thread
One should considder adding a certain feature to the Thread class which would lead to simpler implementations in cases where threads are to run as a service for as long as the servicing object is referenced by outside parties such as a server object.

Class Archon::Utilities::ThreadTerminatedException
This exception is declared in many exception specifications.

Member Archon::X3D::TimeSensor::tick ()
TimeSensors that are initially enabled at load time don't start properly.

Member Archon::X3D::TimeSensor::tick ()
Implement the rest of the TimeSensor functionality.

Member Archon::X3D::TimeSensor::tick ()
We should increase the time

Member Archon::X3D::TimeSensor::tick ()
We should increase the time

Member Archon::X3D::TimeSensor::tick ()
We should increase the time

Member Archon::X3D::TimeSensor::tick ()
We should increase the time

Member Archon::X3D::TimeSensor::tick ()
We should increase the time

Member Archon::X3D::TimeSensor::tick ()
We should increase the time

Member Archon::X3D::Torus::getNormalAndTexCoord (Vector3 hitPoint, int where, const Shape *, Vector3 *hitNormal, Vector2 *hitTexCoord) const
Do texture coordinate determinatin

Member Archon::Utilities::Uri::Uri (const string &uri, const Uri &baseUri=Uri())
Either SyntaxException must be declared to be thrown or another sollution must be sought.

Member Archon::Utilities::UriReference::UriReference (const string &uriReference, const UriReference &baseReference=UriReference())
Either Uri::SyntaxException must be declared to be thrown or another sollution must be sought.

Class Archon::X3D::UrlObject
It would proberbly be a good idea to utilize the new RefObjectBase::dispose method instead of the rather complex use of Utilities::Ref<T>::getSafeRef.

Member Archon::X3D::UrlObject::addUri (string, Time stamp)
This one should instead utilize the soon coming SimpleSequenceFieldBase::add().

Member Archon::X3D::Viewer::renderFrame ()
Considder if we should apply texture transformations to the hit texture coordinates before sending them to the touch sensors.

Member Archon::X3D::Viewer::resetViewpoint (string initialViewpointName, const CoordSystem3x3 &defaultViewpoint)
We must also reset fieldOfView and depthOfRotation.

Member Archon::X3D::Viewer::ShapeCache::updateTexture (const Viewer *viewer)
Will this work on a 16 bit char platform?

Member Archon::Display::VisualX11::newWindow (int left, int top, int width, int height, string title)
What condition should control this?

Member Archon::Display::VisualX11::newWindow (int left, int top, int width, int height, string title)
What condition should control this?

Member Archon::Display::VisualX11::newWindow (int left, int top, int width, int height, string title)
What condition should control this?

Member Archon::SaiTestApps::Textviewer::main (int argc, const char *argv[])
Find bug regarding page without text on it.

Member Archon::SaiTestApps::Textviewer::main (int argc, const char *argv[])
What happpens if app sets a vector<Ref<NodeBase>> with nulls in it?

Member Archon::Math::intersect (const Ray3 &, const Sphere3 &, double &dist)
One should be able to leave out the distance argument.

Member Archon::Utilities::cxxDemangle (string mangledName)
Should utilize the Autoconf macro 'ax_cxx_gcc_abi_demangle'.

Member Archon::Utilities::getDefaultPnmFormat ()
Implement it using libpnm.

Member Archon::Utilities::getDefaultTiffFormat ()
Implement it using libtiff.

Member Archon::Utilities::meshPolygon (const vector< Vector3 > &polygon, double maxPatchSize, MesherContext *context)
vertex color interpolation texture coordinate interpolation (maybe support for concave polygons - only maybe!)

Member Archon::Utilities::Text::escapeNonprintable (const ustring &s)
Should detect any nonprintable unicode character, but only deals with the 8-bit ISO8859-1 subset.

Member Archon::X3D::normalInterp (double x, double x1, double x2, Vector3 y1, Vector3 y2)
Huh, this is heavy, could it be done in an other more afficient way? Maybe using quaternions.

Member Archon::X3D::rotInterp (double x, double x1, double x2, Rotation3 y1, Rotation3 y2)
Is this the right way to interpolate between orientations.

Member Archon::X3D::initializeNetworkComponent ()
I think the AplicationLink node is defined in a way that allows defining them in X3D files.

File parse_xml.H
Verify that the rest of the "glue" code of this file supports unicode.

File script_ecma.C
We might need to use the special unicode variants of the SpiderMonkey API calls.

File script_ecma.C
Currently, events generated by the script methods will be delivered imediately.

File script_ecma.C
Currently we do not properly support inputOutput fields since we cannot have both a method and a property of the same name.

File script_ecma.C
Currently we will not be able to handle a situation where a handler for an inputOutput field writes to the same field.

Namespace Archon::Utilities::ParseValues
These functions are not currently UNICODE enabled.

Namespace Archon::Utilities::ParseValues
All these functions should take generalized character iterator arguments in the STL spirit.

Namespace Archon::Utilities::Term
Maybe use Autoconf's AC_SYS_POSIX_TERMIOS

Generated on Sun Jul 30 22:56:35 2006 for Archon by  doxygen 1.4.4